我正在从 MSDN 复制 VBA 代码片段,该代码片段向我展示了如何将 SQL 查询的结果抓取到 Excel 工作表 (Excel 2007) 中:
Sub GetDataFromADO()
'Declare variables'
Set objMyConn = New ADODB.Connection
Set objMyCmd = New ADODB.Command
Set objMyRecordset = New ADODB.Recordset
'Open Connection'
objMyConn.ConnectionString = "Provider=SQLOLEDB;Data Source=localhost;User ID=abc;Password=abc;"
objMyConn.Open
'Set and Excecute SQL Command'
Set objMyCmd.ActiveConnection = objMyConn
objMyCmd.CommandText = "select * from myTable"
objMyCmd.CommandType = adCmdText
objMyCmd.Execute
'Open Recordset'
Set objMyRecordset.ActiveConnection = objMyConn
objMyRecordset.Open objMyCmd
'Copy Data to Excel'
ActiveSheet.Range("A1").CopyFromRecordset (objMyRecordset)
End Sub
我已经添加了 Microsoft ActiveX Data Objects 2.1 Library 作为引用。并且这个数据库是可以访问的。
现在,当我运行这个子例程时,它出现错误:
运行时错误3704:关闭对象时不允许执行操作。
关于声明:
ActiveSheet.Range("A1").CopyFromRecordset (objMyRecordset)
知道为什么吗?
谢谢。
最佳答案
我已将初始目录添加到您的连接字符串中。我还放弃了 ADODB.Command 语法,转而只创建自己的 SQL 语句并打开该变量上的记录集。
希望这有帮助。
Sub GetDataFromADO()
'Declare variables'
Set objMyConn = New ADODB.Connection
Set objMyRecordset = New ADODB.Recordset
Dim strSQL As String
'Open Connection'
objMyConn.ConnectionString = "Provider=SQLOLEDB;Data Source=localhost;Initial Catalog=MyDatabase;User ID=abc;Password=abc;"
objMyConn.Open
'Set and Excecute SQL Command'
strSQL = "select * from myTable"
'Open Recordset'
Set objMyRecordset.ActiveConnection = objMyConn
objMyRecordset.Open strSQL
'Copy Data to Excel'
ActiveSheet.Range("A1").CopyFromRecordset (objMyRecordset)
End Sub
关于sql - 在Excel-VBA中访问SQL数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1120674/