Listbox met 2 kolommen vullen door database

Status
Niet open voor verdere reacties.

bambam58

Nieuwe gebruiker
Lid geworden
12 apr 2009
Berichten
2
Hallo allemaal, misschien kan iemand mij helpen. Het volgende, ik heb een userform gemaakt met daarin een listbox. Uit de onderliggende database, die ik via ODBC benader, haal ik 2 gegevens op nl. kode en omschrijving. In de listbox wil de gegevens als volgt presenteren:

------------------------------------
|KODE OMSCHRIJVING|
------------------------------------
| 0001 Omschrijving 1 |
| 0002 Omschrijving 2 |
| 0003 Omschrijving 3 |
etc.

Er moet een string gevuld worden met de waarde uit de kode hiervoor heb ik gedefinieerd:

Dim tKode as String

Uit deze lijst wil ik 1 rij selecteren, bijvoorbeeld 0001 en die waarde ik wil gebruiken om een volgende query stellen waarin de clause 0001 is. Bijv.

Set oRst = oCo1.OpenRecordset("SELECT * from tblVoorraad where kode = '" & tString & "'")

Op zich gaat het ophalen van de gegeven best wel uit de tabel en en de listbox wordt wel gevuld maar niet op het juiste moment bij openen. Roep ik apart de procedure aan dan wordt de listbox gevuld met de gegevens onder elkaar.

------------------------------------
|KODE OMSCHRIJVING|
------------------------------------
| 0001 |
| Omschrijving 1 |
| 0002 |
| Omschrijving 2 |

etc.

Hier een stukje van mijn procedure

If Not oRst.EOF Then

With oRst
Do While Not oRst.EOF

DoEvents
frmVoorraad.lstVoorraad.Column = 0
frmVoorraad.lstVoorraad.AddItem (oRst(0))
frmVoorraad.lstVoorraad.Column = 1
frmVoorraad.lstVoorraad.AddItem (oRst(1))

Debug.Print oRst(0), oRst(1)
oRst.MoveNext
Loop

.Close

End With
End If


Wat doe ik verkeerd?
Wie kan mij op gang helpen?

Bedankt alvast

Willem
 
Laatst bewerkt:
Oplossing

Dank aan de anderen die mij op weg geholpen hebben. Het was uiteindelijk redelijk eenvoudig. Logisch en gezond nadenken en codes vergelijken hebben geholpen.

De database query moet uitgevoerd worden tijdens de initialisatiefase van het formulier waarin de listbox zich bevindt.

Private Sub UserForm_Initialize()
Dim orst As Recordset

Call Make_Connection
'Hieronder de procedure om gegevens te halen uit de tabel

Set orst = oCo1.OpenRecordset("SELECT * FROM table")

If Not orst.EOF Then

With orst
Do While Not orst.EOF

DoEvents
frmVoorraad.lstVoorraad.AddItem (orst(0))
frmVoorraad.lstVoorraad.List(frmVoorraad.lstVoorraad.ListCount - 1, 1) = orst(1)

'Controle of gegevens uit de tabel gehaald worden
Debug.Print orst(0), orst(1)
orst.MoveNext
Loop

.Close

End With
End If
End Sub

----------------------------------------------------------------------------------------------------------------------------
De listbox wordt keurig gevuld en de procedure om te selecteren is hieronder weergegeven
Hiervoor is een button op het formulier gemaakt die de selectie mogelijk maakt
---------------------------------------------------------------------------------------------------------------------------
Private Sub CommandButton1_Click()
Dim tKode As String
Dim i As Long
Dim lngCount As Long

For i = 0 To frmVoorraad.lstVoorraad.ListCount - 1
If frmVoorraad.lstVoorraad.Selected(i) Then
lngCount = lngCount + 1

tKode = Me.lstVoorraad.List(i)
End If
Next i

Debug.Print "U heeft gekozen voor " & tKode

'Gegevens worden in een PARAMETER sheet weggeschreven om hergebruikt te worden
ThisWorkbook.Sheets("PAR").Range("J2").Value = tKode
Me.Hide
Call <nieuw programma onderdeel>
End Sub

-------------------------------------------------------------------------------------------------------------------------------

Thats all.

Bedankt

GR Willem;)
 
Laatst bewerkt:
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan