Vad är det för fel på detta?
<font size="1" face="Verdana, Arial, Helvetica, sans-serif">Kod:<font size="1" face="Verdana, Arial, Helvetica, sans-serif" color="#666600">
Private Sub Form_Load()
Dim Databas As Database
Dim tabell As Recordset
Dim persnr As Recordset
Set Databas = OpenDatabase(App.Path & "/db1297.mdb")
Set tabell = Databas.OpenRecordset("select namn from namn", dbOpenDynaset)
Do Until tabell.EOF
Combo1.AddItem tabell!namn
tabell.MoveNext
Loop
Set persnr = Databas.OpenRecordset("select persnr from namn where namn='" & ComboBox.Text & "'", dbOpenDynaset)
text1.Text = persnr
End Sub
Det funkar med att lägga till namn i cb:n men det funkar inte när jag skall lägga till den personens persnr som är vald i cb:n.
Nej...när jag skriver det i form_load så står det object required och markerar persnr raden. När jag sätter den på combo1_change så händer ingenting.
Men jag har tänkt om lite vad gäller utformningen på programmet. Tänkte använda en datacombobox och en grid av nått slag. Vet du om man kan koppla vad som visas i en grid till en combobox?
Jag har en annan idé om hur du kan lösa ditt problem. I båda dina frågor, frågar du tabellen "namn". Då borde det räcka med en fråga:
<font size="1" face="Verdana, Arial, Helvetica, sans-serif">Kod:<font size="1" face="Verdana, Arial, Helvetica, sans-serif" color="#666600">select namn, persnr from namnDå har du ett recordset med både namn och personnummer. Fyll comboboxen med namnen som du vill välja bland. När du väljer något ur comboboxen, kan du få ett index genom Combo1.ListIndex, som returnerar index för valda combobox-element (0 = första element). Du kan använda detta index för att komma åt posten i recordsetet som du fick vid din sql-fråga:
<font size="1" face="Verdana, Arial, Helvetica, sans-serif">Kod:<font size="1" face="Verdana, Arial, Helvetica, sans-serif" color="#666600">tabell.AbsolutePosition = Combo1.ListIndex + 1+1 därför att recordsetets första element är 1, medan comboboxens första element är 0. På så vis har du fått personnumret med endast en enkel fråga till databasen.
I Form_Load kan du ställa sql-frågan och därefter fylla comboboxen. Använd ett recordset som är deklarerat för hela klassen så att du inte förlorar det när du går ur Form_Load.
Men valt persnr kan du inte fixa i Form_Load. Du kan inte göra något comboboxval förrän du är ute ur Form_Load. Istället ska du fånga upp eventet "val i combobox" med funktionen Combo1_Change. Det är där du hämtar rätt post i ditt recordset med hjälp av index i comboboxen. Där kan du även slänga upp personnumret till en textruta.
Ursäkta mina bristande programeringskunskaper men när jag skall deklarera variablerna i hela klassen skall jag då skriva public tabell as recordset i declarations? Och sen kan jag köra Set tabell = Databas.OpenRecordset("select namn,persnr from namn", dbOpenDynaset)i Form_load och värdet på det går att få tag på i i hela klassen?
<font size="1" face="Verdana, Arial, Helvetica, sans-serif">Kod:<font size="1" face="Verdana, Arial, Helvetica, sans-serif" color="#666600">public tabell as recordsetSå kan du skriva, eller ännu hellre
<font size="1" face="Verdana, Arial, Helvetica, sans-serif">Kod:<font size="1" face="Verdana, Arial, Helvetica, sans-serif" color="#666600">private tabell as recordsetså att "tabell" kan nås av alla funktioner i formulärets egna klass, men ej av någon utomstående klass. Vilket av alternativen du än väljer, det viktiga är att de är deklarerade i formulärets källkod innan funktionerna. Deklareras dem inom en funktion, då finns de bara inne i funktionen.
<font size="1" face="Verdana, Arial, Helvetica, sans-serif">Kod:<font size="1" face="Verdana, Arial, Helvetica, sans-serif" color="#666600">Set tabell = Databas.OpenRecordset("select namn,persnr from namn", dbOpenDynaset)Detta kör du i Form_Load. Eftersom "tabell" var deklarerad redan utanför Form_Load, kommer du åt "tabell" i hela klassen.