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