Op deze website gebruiken we cookies om content en advertenties te personaliseren, om functies voor social media te bieden en om ons websiteverkeer te analyseren. Ook delen we informatie over uw gebruik van onze site met onze partners voor social media, adverteren en analyse. Deze partners kunnen deze gegevens combineren met andere informatie die u aan ze heeft verstrekt of die ze hebben verzameld op basis van uw gebruik van hun services. Meer informatie.

Akkoord

Vraag & Antwoord

Programmeren

[vb6] Variable Kolom naam met ADO 2.5

one_234
4 antwoorden
  • Hallo Allen,

    Ik ben momenteel bezig om een programma te schrijven die data in een Access database kan veranderen.

    Het probleem is alleen dat de kolom naam variabel kan zijn. Ik heb dus een text veld gemaakt waarin de gebruiker de naam van de kolom kan opgeven.

    De verbinding naar de database en de tabel werkt goed en als ik een vaste kolom naar opgeef werkt dat ook goed, maar ik wil de dat de naam van de text box wordt gebruikt als kolom naam.

    Ik gebruik daar de volgende code voor:
    [code:1:8047efa0b4] Dim rs As ADODB.Recordset

    Set DB = OpenDatabase(txtDatabaseName)

    ADOConnect

    Set rs = New ADODB.Recordset
    rs.Open "Select * from " & txtTableName, cn

    If Not rs.BOF Then
    rs.MoveFirst
    End If

    While Not rs.EOF

    MsgBox rs!txtFindWhatColumn

    rs.MoveNext
    Wend

    rs.Close
    Set rs = Nothing[/code:1:8047efa0b4]
    Zoals is te zien moet de kolom naar van [i:8047efa0b4]txtFindWhatColumn[/i:8047efa0b4] gebruikt worden maar ik krijg de volgende fout melding:
    [quote:8047efa0b4]Run-time error '3265'

    Item cannot be found in the collection corresponding to the requested name or ordinal.[/quote:8047efa0b4]

    Weet iemand hoe ik dit kan oplossen????

    Alvast bedankt
  • De melding geeft aan dat het betreffende veld niet bestaat in de recordset. Dat zal ook wel kloppen, tenzij je inderdaad een tabelveld de naam txtFindWhatColumn hebt gegeven, wat niet het geval is.
    Ik vermoed dat txtFindWhatColumn de naam is van de textbox waar je die naam in wilt vullen. Dit komt doordat VB alles achter de ! (bang-operator) als literal interpreteert.

    Er vanuit gaande dat je de inhoud van het veld wilt laten zien.
    Probeer eens het volgende:
    (code uit de losse pols direct hier ingetikt, dus kan foutjes bevatten)
    [code:1:ea8df375c6]

    MsgBox rs.fields(txtFindWhatColumn).value

    [/code:1:ea8df375c6]

    Overigens is het helemaal niet logisch om een veldnaam in een textbox in te laten tikken. Als je toch zoiets wilt doen is het verstandiger om de beschikbare veldnamen gewoon te tonen in een combo, of een listbox.

    Dat gaat heel eenvoudig. Je zet een combo op je form en vervolgens vul je die met de namen van de velden uit de fields-collection van de betreffende recordset.

    Zo dus:
    (code ook weer uit het losse polsje, dus geen garanties)
    [code:1:ea8df375c6]
    private functon VulCombo
    dim intI as integer

    intI = 0
    do while intI < rs.fields.count

    combo1.additem rs.fields(intI).name
    intI = intI + 1
    loop

    end function
    [/code:1:ea8df375c6]
  • Laurens,

    Bedankt……. Jou oplossing werkte bijna….. Wat moet er nog achter de naam van het text veld als je daaruit de tekst wil hebben???? [b:4c7a779f3f].text[/b:4c7a779f3f]

    Had dezelfde fout gemaakt :-? Helaas werkte het ook niet met .text erachter dus neem ik jou oplossing..

    Nogmaals bedankt!!
  • De .text property is eigenlijk nooit nodig om de inhoud van een textbox te zien daar dit de defaultproperty is voor een textbox.

    De reden dat het niet werkte is, zoals ik al zei, de !-operator. Dit is een speciale operator waardoor vb dat wat je erachter zet als naam beschouwd. M.a.w hij herkent dan die naam niet als textbox (zal dus ook niet naar de inhoud kijken) maar ziet die naam als de naam van het veld in je tabel.
    De oplossing die ik je gaf gebruikt de waarde die je in de textbox zet als index om in de Fields collection te prikken.

    Ik heb trouwens nog een aanvulling gedaan op vorige mijn reply, dus kijk even 2 posts terug.

Beantwoord deze vraag

Dit is een gearchiveerde pagina. Antwoorden is niet meer mogelijk.