Excelマクロを実行して、ODBCデータベースからいくつかのデータをクエリしようとしています。データベースの詳細は次のとおりです。
[〜#〜] dsn [〜#〜]:sgdv
[〜#〜] uid [〜#〜]:l8qc1
- パスワード:l8qc1
サーバー:sgdv
データベースからデータをクエリしようとしていますが、VBAの行Connection.Open "DSN=sgdv"
に対して次のようなエラーが表示されます。
実行時エラー-2147217843(80040e4d)自動化エラー
エラーを特定できません。助けてください。以下は私のコードです
Sub ReadDB()
Dim mainWorkBook As Workbook
Dim intRowCounter
Set mainWorkBook = ActiveWorkbook
intRowCounter = 2
mainWorkBook.Sheets("Sheet2").Range("A2:Z100").Clear
Set Connection = CreateObject("ADODB.Connection")
Connection.Open "DSN=sgdv"
strQuery = "SELECT * FROM DEDICT01 where DEDICT01.SER_SN='Z1E80R4C'"
Set resultSet = Connection.Execute(strQuery)
Do While Not resultSet.EOF
mainWorkBook.Sheets("Sheet2").Range("A" & intRowCounter).Value = resultSet.Fields("DEDICT01.CUST_PARTS_NO").Value
resultSet.movenext
Loop
resultSet.Close
End Sub
プログラムを変更しましたが、新しいコーディングは
Sub ReadDB()
Dim mainWorkBook As Workbook
Dim intRowCounter
Set mainWorkBook = ActiveWorkbook
intRowCounter = 2
mainWorkBook.Sheets("Sheet2").Range("A2:Z100").Clear
Set Connection = CreateObject("ADODB.Connection")
Connection.ConnectionString = "DSN=sgdv;UID=l8qc1;PWD=l8qc1;"
Connection.Open
strQuery = "SELECT * FROM DEDICT01 where DEDICT01.SER_SN='Z1E80R4C'"
Set resultSet = Connection.Execute(strQuery)
Do While Not resultSet.EOF
mainWorkBook.Sheets("Sheet2").Range("A" & intRowCounter).Value = resultSet.Fields("DEDICT01.CUST_PARTS_NO").Value
resultSet.movenext
Loop
resultSet.Close
End Sub
以前のエラーはなくなりましたが、今は行で新しいエラーが発生しています
mainWorkBook.Sheets("Sheet2").Range("A" & intRowCounter).Value = resultSet.Fields("DEDICT01.CUST_PARTS_NO").Value
エラーは
実行時エラー '3265':
アプリケーション定義またはオブジェクト定義のエラー
問題は接続文字列です。質問でUID、パスワードなどの情報について言及しましたが、この情報はコードのどこにも表示されないことに注意してください。データベースに接続するには、接続文字列でこの情報を指定する必要があります。
次のことを試してください。
Connection.ConnectionString = "DSN=sgdv;UID=l8qc1;PWD=l8qc1;"
Connection.Open
これが機能することを保証することはできませんが、少なくとも正しい方向に進むはずです。それが機能しない場合は、接続文字列を微調整する必要があるかもしれません。 ADODB接続と接続文字列の詳細については、次のMSDNページを参照してください。