2016-04-08 2 views
1

У меня есть соединение через VBA с базой данных MySQL, но я не могу определить правильный синтаксис для возврата значений из запроса SHOW TABLES.ADODB - VBA - MySQL - SHOW TABLES Синтаксис

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 

Заявления об ошибке гласит:

Ошибка выполнения «3265» - Предмет не может быть найден в коллекции , соответствующей запрашиваемое имя или порядковый номер.

Это точно такой же код работает отлично, когда я пытаюсь просмотреть результаты из «SHOW COLUMNS FROM tableName» запроса, а также от «SELECT columnName1 FROM tableName» запроса. Я предполагаю, что ошибка заключается в том, что имена таблиц не должны возвращаться в качестве набора записей?

В соответствии с просьбой, это, как я подключиться к базе данных:

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 

Это, как я закрываю свою базу данных:

Public Function closeDatabase() 
    On Error Resume Next 
    DBCONT.Close 
    Set DBCONT = Nothing 
    On Error GoTo 0 
End Function 
+1

В общем, вы можете заменить весь цикл For..Next на 'ws.Cells (1, 1) .CopyFromRecordset rs' Не уверен, что это поможет с этой конкретной ошибкой, хотя – barrowc

+0

COULd вы показываете, как вы« подключаете базу данных »? –

+0

barrowc - Ваше решение решило мою проблему! Если вы положите это как ответ, я могу отметить его как принятый! –

ответ

0

Ответил barrowc в комментариях:

В вообще, вы могли бы заменить весь цикл For..Next на ws.Cells(1, 1).CopyFromRecordset rs Не уверен, что это помогло бы с этой конкретной ошибкой - barrowc Apr 8 at 23:54

Смежные вопросы