sql - 在Excel-VBA中访问SQL数据库

标签 sql vba excel adodb

我正在从 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/

相关文章:

java - JAKARTA POI 删除 Excel 中的整行(不仅仅是内容)

excel - 在 Excel 或 SPSS 中将 Yes/No 转换为 1/0 的有效方法

Excel:在动态范围内插入公式

mysql - SQL 从 1 x N 中选择,其中都大于

excel - 将公式宏分配给整列

sql - 从 SQL 表中删除重复的行

vba - 错误 506 : Class not defined: 'FileSystemObject'

Excel宏将特定单元格从行转置到列

mysql - 如何在mysql中获取数据前4条记录

sql - 如何从 C 程序执行 sql 语句?