2016-04-08 2 views
1

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 
+1

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

+0

COuld Sie zeigen, wie Sie' connectDatabase'? –

+0

barrowc - Ihr Vorschlag hat mein Problem gelöst! Wenn Sie das als Antwort aufschreiben, kann ich das als akzeptiert markieren! –

Antwort

0

Beantwortet von barrowc in den Kommentaren:

In Allgemein, Sie könnten die ganze For..Next Schleife mit ws.Cells(1, 1).CopyFromRecordset rs ersetzen Nicht sicher, ob es mit diesem spezifischen Fehler obwohl helfen würde - barrowc 8. April um 23:54