![通过 ODBC 查询数据库时出现 VBA 自动化错误](https://linux22.com/image/1469943/%E9%80%9A%E8%BF%87%20ODBC%20%E6%9F%A5%E8%AF%A2%E6%95%B0%E6%8D%AE%E5%BA%93%E6%97%B6%E5%87%BA%E7%8E%B0%20VBA%20%E8%87%AA%E5%8A%A8%E5%8C%96%E9%94%99%E8%AF%AF.png)
我正在尝试运行 Excel 宏来从我的 ODBC 数据库中查询一些数据。我的数据库详细信息如下:
直接连接网络:sgdv
唯一标识: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’:
应用程序定义或对象定义的错误
答案1
问题在于您的连接字符串。请注意,您在问题中提到了 UID、密码等信息,但这些信息在您的代码中没有出现。要连接到数据库,您必须在连接字符串中提供此信息。
请尝试以下操作:
Connection.ConnectionString = "DSN=sgdv;UID=l8qc1;PWD=l8qc1;"
Connection.Open
我不能保证这会起作用,但至少应该能让你走上正轨。如果它不起作用,你可能需要调整连接字符串。有关 ADODB 连接和连接字符串的更多信息,请参阅此 MSDN 页面:
答案2
答案取决于你的意思mainworkbook
- 如果它是另一个工作簿,则需要提供完整路径,如 c:......
- 如果是当前工作簿,则无需选择数据类型。当前工作簿本身就是活动工作簿