andyah
Goto Top

Access 2010 - Listenfeld an ADO-Recordset knüpfen

Hi NG,

wie kann ich ein Listenfeld an ein ADO-Recordset knüpfen. Die zugrundeliegende Datenquelle ist keine mit Access verknüpfte ODBC Datenquelle.

Gruß
Andy

PS: Ich habe es gerade mit "Listenfeld.Recordset = rs" versucht und bekomme den Fehlercode 3265
Da Auslesen eines einzelnen Feldes per Recordset funktioniert.

Content-Key: 228268

Url: https://administrator.de/contentid/228268

Printed on: April 25, 2024 at 05:04 o'clock

Member: colinardo
colinardo Jan 31, 2014 updated at 11:07:41 (UTC)
Goto Top
Hallo Andy,
warum erstellst du keine Datenverknüpfung zu deiner ODBC-Quelle Tab: Externe Daten > Importieren und Verknüpfen > ODBC-Datenbank.
Damit lässt sich eine Tabelle in deiner Datebank einrichten welche mit dieser Datenquelle synchron ist, und welche dann als Quelle für den Inhalt deines Listenfeldes dienen kann.

Ansonsten durchlaufe alle Zeilen eines Recordsets und erstelle für jede Zeile einen Listeneintrag...nach dieser Art und Weise:
Set rs = CurrentDb.OpenRecordset("Tabelle")  
rs.MoveFirst
While Not rs.EOF
   Liste1.AddItem rs.Fields("Spalte").Value  
   rs.MoveNext
Wend

Grüße Uwe
Member: AndyAh
AndyAh Jan 31, 2014 updated at 11:31:49 (UTC)
Goto Top
Hi Uwe,

ich möchte die Userverwaltung des SQL-Servers nutzen. Beim Durchlauf des Recordsets ergab sich der Fehler:6014

Hie mal das ganze Listing:

Private Sub Form_Load()

   Dim connstr As String
   Dim sql As String
   Dim conn As New ADODB.Connection
   Dim rs As New ADODB.Recordset

   'user und passwort kommen aus einem Anmeldefenster  
   connstr = "DRIVER={MySQL ODBC 5.2 ANSI Driver};SERVER=127.0.0.1;DATABASE=adressen;" & "USER=" & user & ";" & "PASSWORD=" & passwort & "; OPTION=3"  
   
   conn.ConnectionString = connstr
   
   On Error GoTo LogonError
    
   conn.Open

   On Error Resume Next

  
   sql = "SELECT Nachname FROM mitglied"  
   rs.Open sql, conn, adOpenDynamic, adLockOptimistic
   rs.MoveFirst
   
   Fehlercode: 6026
   'Set Me!mitglieder.Recordset = rs  

  Fehlercode: 3265
   While Not rs.EOF()
     mitglieder.AddItem rs!Fields("Nachname").Value  
     rs.MoveNext
   Wend
   
   rs.Close
   conn.Close

LogonError:
    If Err.Number <> 0 Then
        MsgBox "Fehler beim Login zur Datenbank: " & Err.Number  
    End If
End Sub

Gruß
Andy
Member: colinardo
colinardo Jan 31, 2014 at 11:27:19 (UTC)
Goto Top
Das kommt vermutlich daher weil ein ADODB.Recordset nicht das selbe ist wie ein DAO.Recordset welches das Listenfeld erwartet. Du müsstest also mit deinem Recordset des SQL-Servers ein DAO-Recordset füllen und das dem Listenfeld zuweisen.

Grüße Uwe
Member: colinardo
colinardo Jan 31, 2014 at 12:00:26 (UTC)
Goto Top
Zitat von @AndyAh:
Hie mal das ganze Listing:
Private Sub Form_Load()

   Dim connstr As String
   Dim sql As String
   Dim conn As New ADODB.Connection
   Dim rs As New ADODB.Recordset

   'user und passwort kommen aus einem Anmeldefenster  
   connstr = "DRIVER={MySQL ODBC 5.2 ANSI Driver};SERVER=127.0.0.1;DATABASE=adressen;" & "USER=" & user & ";" & "PASSWORD=" & passwort & "; OPTION=3"  
   
   conn.ConnectionString = connstr
   
   On Error GoTo LogonError
    
   conn.Open

   On Error Resume Next

   sql = "SELECT Nachname FROM mitglied"  
   rs.Open sql, conn, adOpenDynamic, adLockOptimistic
   rs.MoveFirst
   
   ' Listbox leeren bevor die Mitglieder hinzugefügt werden.  
   For i = 0 To mitglieder.ListCount - 1
        mitglieder.RemoveItem 0
   Next
   While Not rs.EOF
     mitglieder.AddItem rs!Nachname
     rs.MoveNext
   Wend
   
   rs.Close
   conn.Close

LogonError:
    If Err.Number <> 0 Then
        MsgBox "Fehler beim Login zur Datenbank: " & Err.Number  
    End If
End Sub
Member: AndyAh
AndyAh Jan 31, 2014 at 12:00:33 (UTC)
Goto Top
Hi Uwe,

wie müsste dann die DAO Datenbank-Connection bzw der Connectionstring für MySQL ODBC 5.2 ANSI Treiber heissen?

Gruß
Andy
Member: colinardo
colinardo Jan 31, 2014 at 12:04:38 (UTC)
Goto Top
Zitat von @AndyAh:
wie müsste dann die DAO Datenbank-Connection bzw der Connectionstring für MySQL ODBC 5.2 ANSI Treiber heissen?
das geht IMHO nicht.
Member: AndyAh
AndyAh Jan 31, 2014 at 12:15:28 (UTC)
Goto Top
Hi,

und was ist mit dem Fehler in:

  Fehlercode: 3265 
   While Not rs.EOF() 
     mitglieder.AddItem rs!Fields("Nachname").Value   
     rs.MoveNext 
   Wend 

In der Schleifte sollte alles richtig sein, trotzdem bekomme ich die Fehlermeldung.

Gruß
Andy
Member: colinardo
colinardo Jan 31, 2014 updated at 12:25:59 (UTC)
Goto Top
Zitat von @AndyAh:

In der Schleifte sollte alles richtig sein, trotzdem bekomme ich die Fehlermeldung.
hatte ich oben doch oben bereits im Code korrigiert. Bei mir läuft dein obiges Konstrukt:
rs!Fields("Nachname").Value
nicht und auch die beiden Klammern hinter EOF sind Quatsch, da es eine Eigenschaft ist und keine Funktion.
machs innerhalb der Schleife entweder so:
mitglieder.AddItem rs!Nachname
oder so:
mitglieder.AddItem rs.Fields("Nachname").Value  
beachte den Punkt anstatt dem Ausrufezeichen hinter rs.
Member: AndyAh
AndyAh Jan 31, 2014 at 12:24:41 (UTC)
Goto Top
Hi,

dein letzter Vorschlag hat es gebracht. Danke.

Gruß
Andy