首页 > 解决方案 > CopyFromRecordset 在 Server 2012 中失败,但在 Windows 7 或 VBA/Excel 中的 Windows 10 中没有

问题描述

我有一个 Excel 文档,它使用 ADO 连接到 BASIS 数据库,并使用 SQL 来获取数据。数据被放入记录集中,然后使用 CopyFromRecordset 显示在工作表上。

此过程在 Windows 7 和 Windows 10 上的 Excel 中运行良好,但是,当我在运行 Windows Server 2012 R2 的终端服务器上运行相同的电子表格时,我收到错误 Method 'CopyFromRecordset' of object 'Range' failed。错误号为 -2147417848。

我读过很多帖子,声称问题出在数据太多、列太多或行太多,但我修改了我的查询以在 1 条数据记录中引入 1 个字段,以及包含所有数据的查询在 Windows 7 和 10 上运行良好。

当我使用 connection.OpenSchema 将信息引入 Recordset 并在工作表上显示该数据时没有问题,但是当我使用 resultset.open 或 connection.execute 引入字段数据时,我每次都会收到错误消息。

此外,当我在 openschema 记录集中使用 movefirst 和 movenext 等函数时没有问题,但是当我在字段数据记录集上使用这些函数时,Excel 完全崩溃并给出了这些问题的详细信息。

问题签名:问题事件名称:APPCRASH 应用程序名称:EXCEL.EXE 应用程序版本:16.0.4690.1000 应用程序时间戳:5acd084f 故障模块名称:BBjODBC.dll 故障模块版本:16.2.4.0 故障模块时间戳:58d03d38 异常代码:c0000005 异常偏移量: 0000000000179cc1 操作系统版本:6.3.9600.2.0.0.16.7 区域设置 ID:1033

我正在使用的代码的相关部分如下。

    Dim cn As ADODB.Connection
    Dim rs As ADODB.Recordset

    Set cn = New ADODB.Connection
    Set rs = New ADODB.Recordset

    cn.ConnectionString = "DSN=ODBC_RIC;UID=RIC;"
    cn.Open

    cmdText = "select * from prospectmaster"

    'I tried all these open combinations
    'rs.Open cmdText, cn, adOpenDynamic, adLockReadOnly
    'rs.Open cmdText, cn, adOpenForwardOnly, adLockOptimistic
    'rs.Open cmdText, cn, adOpenDynamic, adLockPessimistic
    'rs.Open cmdText, cn, adOpenDynamic, adLockOptimistic
    'rs.Open cmdText, cn, adOpenDynamic, adLockUnspecified
    'rs.Open cmdText, cn, adOpenUnspecified, adLockUnspecified

    'I settled on this one that works everywhere else    
    Set rs = cn.Execute(cmdText)

    ' Display Headers (works Fine)
    For n = 0 To rs.Fields.Count - 1
        Range("A6").Offset(0, n).Value = rs.Fields(n).Name
    Next n

   ' Display the data (does not work fine)
    Range("A7").CopyFromRecordset rs

    rs.Close
    Set rs = Nothing
    cn.Close
    Set cn = Nothing

我不知道接下来要尝试什么。任何帮助,将不胜感激。

标签: sqlexceladodb

解决方案


我发现问题在于我的 odbc 驱动程序是 32 位的,并且仅适用于 32 位版本的 Excel。我正在测试它的计算机是 64 位的。我安装了正确版本的 Office,它工作正常。或者,我可以安装正确的驱动程序,它也可以这样工作。


推荐阅读