【发布时间】:2019-08-11 19:19:04
【问题描述】:
我有一个 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 完全崩溃并给出了这些问题的详细信息。
问题签名: 问题事件名称:APPRCASH 应用程序名称: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
我不知道下一步该尝试什么。任何帮助将不胜感激。
【问题讨论】: