私は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
これは私が私のデータベースをクローズする方法である:コメントでbarrowcによって回答
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
あなたは' connectDatabase'をどのように表示しますか? –
barrowc - あなたの提案は私の問題を解決しました!あなたが答えとしてこれを置くなら、私は受け入れられたとマークすることができます! –