Alle Comboboxen mit DB-Content füllen

Grüß Sie,

ich stehe vor folgendem Problem:

Beim FormLoad Ereigniss sollen sechs Comboboxen mit Inhalten aus einer DB gefüllt werden. Mein Lösung war folgende:

 Set cnn = DataEnv.PWD\_DB
 Set cmd = New ADODB.Command
 cnn.Open
 Set cmd.ActiveConnection = cnn

 cmd.CommandText = "BSHDaten"
 cmd.CommandType = adCmdTable

 Set rs = cmd.Execute()

 Do While Not rs.EOF
 cboname.AddItem rs!Name
 cboaccname.AddItem rs!useraccount
 cbopwd.AddItem rs!pwd
 cboann1.AddItem rs!Annmerkung1
 cboann2.AddItem rs!Annmerkung2
 cboann3.AddItem rs!Annmerkung3
 rs.MoveNext
 Loop

 rs.Close

doch es geht nicht!

Bitte um Hilfe

mfg Michael Schieferer

hi,

leider kenne ich deinen code nicht, aber spontan würde ich sagen, dass der fehler beim connection-objekt liegt.

ich habe folgenden code gerade ausprobiert und der funktioniert einwandfrei (mal abgesehen davon, dass keinerlei überprüfungen usw. eingebaut sind und man das ganze vermutlich anders lösen könnte / sollte).

zur umgebung: hier wurde für eine vfp-datenbank eine system-dsn „BSE“ eingerichtet, die eine tabelle „tabelle“ mit dem feld „feld1“ enthält.

 Set cnn = New ADODB.Connection
 Set cmd = New ADODB.Command

 cnn.Open "DSN=BSE", "", "", adOpenUnspecified

 Set cmd.ActiveConnection = cnn
 cmd.CommandText = "Tabelle"
 cmd.CommandType = adCmdTable
 Set rs = cmd.Execute()

 Do While Not rs.EOF
 Combo1.AddItem rs!Feld1
 Combo2.AddItem rs!Feld1
 Combo3.AddItem rs!Feld1
 rs.MoveNext
 Loop

 rs.Close
 cnn.Close

mfg
thomas langenfeld

Nein, das Problem liegt woanders!
Um nun deinen Code zu nehmen:

 Set cnn = New ADODB.Connection
 Set cmd = New ADODB.Command

 cnn.Open "DSN=BSE", "", "", adOpenUnspecified

 Set cmd.ActiveConnection = cnn
 cmd.CommandText = "Tabelle"
 cmd.CommandType = adCmdTable
 Set rs = cmd.Execute()

 Do While Not rs.EOF
 !!! Combo1.AddItem rs!Feld1 !!!
 !!! Combo2.AddItem rs!Feld1 !!!
 !!! Combo3.AddItem rs!Feld1 !!!
 rs.MoveNext
 Loop

 rs.Close
 cnn.Close

Du beziehst den COntent aus der gleichen Spalte! Bei meinem Programm ist es so das zwar die Tabelle gleich ist ich aber den Content aus verschiedenen Spalten auslese.

hi,

habe gerade der tabelle zwei weitere spalten hinzugefügt und dann folgenden code ausgeführt:

 Set cnn = New ADODB.Connection
 Set cmd = New ADODB.Command

 cnn.Open "DSN=BSE", "", "", adOpenUnspecified

 Set cmd.ActiveConnection = cnn
 cmd.CommandText = "Tabelle"
 cmd.CommandType = adCmdTable
 Set rs = cmd.Execute()

 Do While Not rs.EOF
 Combo1.AddItem rs!Feld1
 Combo2.AddItem rs!Feld2
 Combo3.AddItem rs!Feld3
 rs.MoveNext
 Loop

 rs.Close
 cnn.Close

und (wie sollte es auch anders sein) das richtige ergebnis erhalten…

wie wärs wenn du mir deinen gesamten code mailst?

mit diesem code-schnipsel allein kann ich dir leider nicht weiterhelfen?

mfg
thomas langenfeld

Hallo,

falls noch Interresse besteht:

Bei derartigen, nur zum lesen geöffneten
Recordsets ist es meiner Erfahrung nach
ratsam die ‚ActiveConnection‘ auf ‚NOTHING‘
zu setzen. Das geht aber nur, wenn der RecordSet
in clientseitigen Curser geöffnet wird.

**’ Hier late-binding
Set CON As New ADODB.Connection
Set RS As New ADODB.Recordset

’ Cursorverwaltung auf Client
CON.CursorLocation = adUseClient
CON.open …

’ Nur lesen
RS.CusorType = adOpenForwardOnly

RS.open [cmd], CON

Set RS.ActiveConnection = Nothing

Do Until RS.EOF
RS.MoveNext
Loop**
usw.

Vielleicht nicht die Lösung zum Problem
aber dennoch nützlich. Performanzsteigerung
gegenüber gebundenen Recordsets etwa 20-50%.
Je nach Datenmenge.

Gruss Chris