Ich habe eine Verbindung über VBA zu einer MySQL-Datenbank, aber ich kann nicht die richtige Syntax bestimmen, um die Werte aus einer SHOW TABLES-Abfrage zurückzugeben.ADODB - VBA - MySQL - TABELLEN ANZEIGEN Syntax
Dim rs As Object
Dim ws As Worksheet
Dim sqlstr As String
Set rs = CreateObject("ADODB.Recordset")
Set ws = ThisWorkbook.Worksheets(1)
sqlstr = "SHOW TABLES"
Call connectDatabase
rs.Open sqlstr, DBCONT
For i = 0 To (rs.RecordCount - 1)
ws.Cells(i+1, 1).value = rs(i)
rs.movenext
Next i
rs.Close
Set rs = Nothing
Call closeDatabase
Die Fehler Anweisung lautet wie:
Laufzeitfehler ‚3265‘ - Artikel kann nicht in der Sammlung entsprechend den angeforderten Namen oder Ordinalzahl gefunden werden.
Der exakt gleiche Code funktioniert perfekt, wenn ich die Ergebnisse einer „SHOW COLUMNS FROM tableName
“ Abfrage anzuzeigen versuchen und auch von einer „SELECT columnName1 FROM tableName
“ Abfrage. Ich nehme an, der Fehler ist, dass die Tabellennamen nicht als Recordset zurückgegeben werden sollen ???
Wie gewünscht, das ist, wie ich in meiner Datenbank verbinden:
Public DBCONT As Object
Public Function connectDatabase()
Set DBCONT = CreateObject("ADODB.Connection")
Dim Server_Name As String
Dim Database_Name As String
Dim User_ID As String
Dim Password As String
Dim Port As String
Dim sConn As String
Server_Name = "localhost"
Database_Name = "databaseName"
User_ID = "userID"
Password = "password"
Port = "3306"
sConn = "Driver={MySQL ODBC 5.1 Driver};Server=" & _
Server_Name & ";Database=" & Database_Name & _
";UID=" & User_ID & ";PWD=" & Password & ";Option=3;"
DBCONT.Open sConn
DBCONT.cursorlocation = 3
End Function
Dies ist, wie ich meine Datenbank zu schließen:
Public Function closeDatabase()
On Error Resume Next
DBCONT.Close
Set DBCONT = Nothing
On Error GoTo 0
End Function
Im Allgemeinen können Sie die ganze For..Next Schleife durch 'ws.Cells (1, 1) ersetzen. CopyFromRecordset rs' Nicht sicher, ob es mit diesem spezifischen Fehler obwohl helfen würde – barrowc
COuld Sie zeigen, wie Sie' connectDatabase'? –
barrowc - Ihr Vorschlag hat mein Problem gelöst! Wenn Sie das als Antwort aufschreiben, kann ich das als akzeptiert markieren! –