2016-04-08 11 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 

これは私が私のデータベースをクローズする方法である:コメントでbarrowcによって回答

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

あなたは' connectDatabase'をどのように表示しますか? –

+0

barrowc - あなたの提案は私の問題を解決しました!あなたが答えとしてこれを置くなら、私は受け入れられたとマークすることができます! –

答えて

0

で一般的には、For..Nextループ全体をws.Cells(1, 1).CopyFromRecordset rsと置き換えることができますが、この特定のエラーに役立つかどうかわかりません - barrowc Apr 8 at 23:54