У меня есть соединение через 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
В общем, вы можете заменить весь цикл For..Next на 'ws.Cells (1, 1) .CopyFromRecordset rs' Не уверен, что это поможет с этой конкретной ошибкой, хотя – barrowc
COULd вы показываете, как вы« подключаете базу данных »? –
barrowc - Ваше решение решило мою проблему! Если вы положите это как ответ, я могу отметить его как принятый! –