webForumDet fria alternativet

Sql

13 svar · 211 visningar · startad av gundeman

gundemanMedlem sedan jan. 200167 inlägg
#1

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.

[Redigerat av gundeman den 15 jan 2002]

InsiderMedlem sedan jan. 2000978 inlägg
#2

Testa att lägga en händelse för ComboBoxen:

<font size="1" face="Verdana, Arial, Helvetica, sans-serif">Kod:<font size="1" face="Verdana, Arial, Helvetica, sans-serif" color="#666600">Private Sub ComboBox_Change()
Dim persnr As Recordset

Set persnr = Databas.OpenRecordset("select persnr from namn where namn='" & ComboBox.Text & "'", dbOpenDynaset)
text1.Text = persnr

End Sub

Ta sedan bort de raderna ur Form_Load.

Funkade det???

gundemanMedlem sedan jan. 200167 inlägg
#3

Nej dessvärre inte. Det är som om inte change anropas men det är väll inte möjligt. Cb:n funkar som vanligt men det händer inget med text1.text.

[Redigerat av gundeman den 18 jan 2002]

InsiderMedlem sedan jan. 2000978 inlägg
#4

Jag chansar lite hejvilt nu...men ska det inte stå:

text1.Text = persnr!persnr

?

gundemanMedlem sedan jan. 200167 inlägg
#5

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?

InsiderMedlem sedan jan. 2000978 inlägg
#6

Men det här ska nog gå att lösa så som du hade tänkt.
Du använder inte ADO va?

UlfTMedlem sedan maj 20018 027 inlägg
#7

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.

------------------
Två vägar till framgång:

  1. Avslöja inte dina hemligheter.
gundemanMedlem sedan jan. 200167 inlägg
#8

Hur får jag tag på personnr sen då om jag vill lägga till det i en textruta?

Skall koden ligga i Form_Load?

[Redigerat av gundeman den 19 jan 2002]

UlfTMedlem sedan maj 20018 027 inlägg
#9

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.

------------------
Två vägar till framgång:

  1. Avslöja inte dina hemligheter.
gundemanMedlem sedan jan. 200167 inlägg
#10

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?

UlfTMedlem sedan maj 20018 027 inlägg
#11

<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.

------------------
Två vägar till framgång:

  1. Avslöja inte dina hemligheter.

[Redigerat av UlfT den 19 jan 2002]

gundemanMedlem sedan jan. 200167 inlägg
#12

<font size="1" face="Verdana, Arial, Helvetica, sans-serif">Kod:<font size="1" face="Verdana, Arial, Helvetica, sans-serif" color="#666600">
Private Databas As Database
Private tabell As Recordset
Private persnr As Recordset

Private Sub Combo1_Change()
tabell.AbsolutePosition = Combo1.ListIndex + 1
Text1.Text = tabell!persnr
End Sub

Private Sub Form_Load()

Set Databas = OpenDatabase(App.Path & "/db1297.mdb")

Set tabell = Databas.OpenRecordset("select namn,persnr from namn", dbOpenDynaset)

Do Until tabell.EOF
Combo1.AddItem tabell!namn
tabell.MoveNext
Loop

End Sub

Så här har jag skrivit nu och det händer ingenting med text1.

[Redigerat av gundeman den 19 jan 2002]

UlfTMedlem sedan maj 20018 027 inlägg
#13

Jag var inne på fel spår när jag nämnde "Combo1_Change". Det ska vara "Combo1_Click", eftersom "Click"-händelsen inträffar när man har valt något i ComboBoxen. Du kan läsa mer på http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vb98/html/vbevtclick.asp som behandlar click-eventet, och http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vb98/dt_vbobjComboBox_E.asp som tar upp de events som är aktuella för just comboboxar.

------------------
Två vägar till framgång:

  1. Avslöja inte dina hemligheter.
gundemanMedlem sedan jan. 200167 inlägg
#14

Nu funkar det!!! Tack du anar inte hur mycket detta hjälper mig.

132 ms totalt · 3 externa anrop · v20260731065814-full.30151723
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
129 ms — hämta tråd, inlägg och bilagor (db)