Excel升级后评估EO​​F时ADO记录集崩溃

时间:2019-01-24 01:06:40

标签: excel vba odbc ado

我有一个Excel工作表,该工作表使用ODBC连接连接到Basis数据库。当我们在Windows Server 2008上运行Excel 2010时,它工作正常,但随后在Windows Server 2016上升级到Excel 2016,它不再起作用。

下面的代码演示了这个问题:

Public Sub cnntest()
Dim cnn As ADODB.Connection
Dim sql As String
Dim rs As ADODB.Recordset

Set cnn = New ADODB.Connection
cnn.Open "DSN=redacted;UID=redacted;PWD=redacted;"

sql = "SELECT ITEM FROM IC_ITM_MST WHERE ITEM = '1400-4'"
Set rs = New ADODB.Recordset
rs.CursorLocation = adUseServer
rs.Open sql, cnn

For Each a In rs.Fields
    Debug.Print a.Name
Next a

Debug.Print rs.EOF

rs.Close
cnn.Close
End Sub

当我运行上面的代码时,它会打印该字段的名称,因此我知道它正在连接到数据库并执行查询。但是,当它尝试求值rs.EOF时,它立即崩溃并抛出一条错误消息,指出“ Microsoft Excel已停止工作。”当我将鼠标悬停在代码的那部分时,它也会执行此操作。在Windows Server 2008的Excel 2010上尝试使用完全相同的代码即可正常运行。

有人知道为什么它可以在旧版本的Excel上运行而不能在新版本的Excel上运行吗?关于如何解决它的任何想法?

1 个答案:

答案 0 :(得分:0)

四个月后,我终于找到了答案。我使用Windows事件查看器查看了崩溃的错误日志,其中显示

  

“故障排除应用程序名称:EXCEL.EXE,版本16.0.4266.1001,时间   邮票:0x55ba1551   错误的模块名称:BBjODBC.dll,版本14.1.1.0,时间戳:0x5400df87   异常代码:0xc0000005

这确认问题出在BBj驱动程序上。事实证明,负责更新该驱动程序的人员已在服务器的所有硬盘驱动器上对它进行了更新,但C驱动器除外,这是Excel决定使用的驱动器。结果,即使我们的技术人员声称所有内容都是最新的,我们也只能使用五年的旧版驱动程序。我们目前正在等待驱动程序更新,因此希望可以解决该问题。