Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: Select Recordset auslesen

Select Recordset auslesen
25.05.2008 20:37:00
janbro
Hallo Forum,
ich bräuchte mal wieder Eure Hilfe.
Ich habe folgende kleine Funktion, die auch sauber ausgeführt wird und mir einen schönen Select ausgiebt. Nur weiß ich jetzt nicht weiter. Ich vermute der Select muss nun in ein Recordset und kann dann Datensatz für Datensatz ausgegeben werden, nur wie stelle ich das an? Wie bekomme ich den Rückgabewert in result und wie lese ich diesen aus?
weitere Infos: die Datenbank ist eine MySQL die ich mit MyODBC anspreche. Die Tabelle Test enthält die Spalten ID (int) und Beschreibung (text).

Function relDaten(ArbeitsMappe, Spalte, MyTable, SpalteMySQL)
Sheets(ArbeitsMappe).Select
Set Conn = New ADODB.Connection
With Conn
.ConnectionString = "ODBC;DATABASE=test;DRIVER={MySQL ODBC 3.51 Driver};OPTION=0;;PORT=  _
_
_
0;SERVER=localhost;user=user;password=*****"
.Open "DSN=test_mysql"
End With
SqlStatement = "Truncate Table test." & MyTable & ";"
'Conn.Execute (SQLStatement)
zeilenzahl = Range("E65536").End(xlUp).Row
For i = 2 To zeilenzahl
Vergleichswert = Cells(i, Spalte).Value
SqlStatement = "Select " & MyTable & MyTable & "." & SpalteMySQL & " where test." &  _
MyTable & " = " & Chr(13) & Vergleichswert & Chr(13) & ";"
Cells(2, 4).Value = SqlStatement
result = Conn.Execute(SqlStatement)
--> Was mach ich ab hier?
Next i
Conn.Close
End Function


Merci
Jan

Anzeige

2
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Select Recordset auslesen
26.05.2008 00:10:41
Luschi
Hallo Jan,
so sollte es gehen:
Dim result As New ADODB.Recordset
'Dein weiterer Code
Set result = Conn.Execute(SqlStatement)
'die Feldname schreiben
'k enthält die Anzahl der Felder im Recordset
k = result.Fields.Count
For i = 0 To k - 1
    ws.Cells(9, 1 + i).Value = Rs.Fields(i).Name
Next i
'Anfangsadresse und Schreibbefehl
Activesheet.Cells(10, 1) .CopyFromRecordset result
Und das war es dann auch schon.
Zum Schluß noch alle Objekt-Variablen auf Nothing setzen: Set result = Nothing usw.
Gruß von Luschi
aus klein-Paris

Anzeige
AW: Select Recordset auslesen
27.05.2008 06:20:35
janbro
Vielen Dank, das war der Tipp den ich brauchte.
Jan
;
Anzeige
Anzeige

Infobox / Tutorial

Select Recordset auslesen in Excel VBA


Schritt-für-Schritt-Anleitung

Hier ist eine einfache Schritt-für-Schritt-Anleitung, um ein Recordset in Excel VBA auszulesen:

  1. Verbindung zur Datenbank herstellen: Stelle sicher, dass Du eine Verbindung zu Deiner MySQL-Datenbank mit ODBC herstellst. Du kannst den Code wie folgt nutzen:

    Set Conn = New ADODB.Connection
    With Conn
       .ConnectionString = "ODBC;DATABASE=test;DRIVER={MySQL ODBC 3.51 Driver};user=user;password=*****"
       .Open
    End With
  2. SQL-Abfrage erstellen: Erstelle Deine SQL-Abfrage, um die gewünschten Daten abzurufen. Achte darauf, die richtige Tabelle und Spalten anzugeben:

    SqlStatement = "SELECT * FROM " & MyTable & ";"
  3. Recordset erstellen: Verwende den ADODB.Recordset, um die Ergebnisse Deiner Abfrage zu speichern:

    Dim result As New ADODB.Recordset
    Set result = Conn.Execute(SqlStatement)
  4. Daten aus dem Recordset auslesen: Du kannst die Daten nun nach Bedarf in ein Arbeitsblatt kopieren. Hier ein Beispiel, wie Du die Daten ab Zeile 10 in die Spalten A und B schreiben kannst:

    ActiveSheet.Cells(10, 1).CopyFromRecordset result
  5. Verbindung schließen: Vergiss nicht, die Verbindung und das Recordset am Ende zu schließen:

    result.Close
    Set result = Nothing
    Conn.Close

Häufige Fehler und Lösungen

  • Fehler 1: "Kein Recordset gefunden"
    Lösung: Stelle sicher, dass Deine SQL-Abfrage korrekt ist und Daten zurückgibt.

  • Fehler 2: "Verbindung konnte nicht hergestellt werden"
    Lösung: Überprüfe Deine ODBC-Datenquelle und die Zugangsdaten zur Datenbank.

  • Fehler 3: "Falsche Anzahl von Feldern"
    Lösung: Achte darauf, dass die Anzahl der Felder in der SQL-Abfrage mit der Anzahl der Spalten im Arbeitsblatt übereinstimmt.


Alternative Methoden

Eine alternative Methode zur Arbeit mit Recordsets in Excel VBA ist die Verwendung von AdoDb.Connection anstelle von ADODB.Connection, wenn Du speziellere Funktionen benötigst.

Hier ein Beispiel:

Dim conn As Object
Set conn = CreateObject("ADODB.Connection")
conn.Open "DSN=test_mysql;UID=user;PWD=*****"

Praktische Beispiele

Hier ist ein einfaches Beispiel, um Daten aus einer MySQL-Datenbank auszulesen und in ein Excel-Arbeitsblatt zu kopieren:

Function GetData()
    Dim Conn As New ADODB.Connection
    Dim result As New ADODB.Recordset
    Dim SqlStatement As String

    Conn.ConnectionString = "ODBC;DATABASE=test;DRIVER={MySQL ODBC 3.51 Driver};user=user;password=*****"
    Conn.Open
    SqlStatement = "SELECT * FROM Test;"

    Set result = Conn.Execute(SqlStatement)

    ActiveSheet.Cells(1, 1).CopyFromRecordset result

    result.Close
    Conn.Close
End Function

Dieses Beispiel verwendet die CopyFromRecordset-Methode, um die Daten direkt in das Arbeitsblatt zu übertragen.


Tipps für Profis

  • Nutze Excel VBA Truncate, um die Daten in einer Tabelle vor dem Einfügen neuer Daten zu löschen. Das spart Zeit und Ressourcen.
  • Verwende Option Explicit, um sicherzustellen, dass alle Variablen deklariert werden, was zu weniger Fehlern führt.
  • Experimentiere mit der Recordset-Eigenschaft Fields, um spezifische Spalten auszulesen, anstatt alle Daten zu extrahieren.

FAQ: Häufige Fragen

1. Wie kann ich mehrere Datensätze gleichzeitig auslesen?
Du kannst die CopyFromRecordset-Methode verwenden, um alle Datensätze in einem Rutsch zu kopieren, anstatt sie einzeln auszulesen.

2. Was ist der Unterschied zwischen Execute und Open bei Recordsets?
Execute führt eine SQL-Anweisung aus und gibt ein Recordset zurück, während Open dafür verwendet wird, um eine bestehende Verbindung zu öffnen.

3. Muss ich eine spezielle Bibliothek aktivieren, um ADO zu verwenden?
Ja, Du musst sicherstellen, dass die Microsoft ActiveX Data Objects-Bibliothek in den Verweisen aktiviert ist (Tools > Verweise).

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige