Excel 升级后评估 EOF 时 ADO 记录集崩溃

ADO recordset crashes while evaluating EOF after Excel upgrade

我有一个 Excel sheet 使用 ODBC 连接连接到 Basis 数据库。当我们在 Windows Server 2008 上 运行ning 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 has stopped working." 当我将鼠标悬停在该部分代码上时它也会这样做。当我在 Windows Server 2008 上的 Excel 2010 上尝试时,完全相同的代码 运行 没问题。

知道为什么它适用于 Excel 的旧版本但不适用于新版本吗?关于如何修复它有什么想法吗?

四个月后,我终于找到了答案。我使用 Windows 事件查看器查看崩溃的错误日志,上面写着

"Faulting application name: EXCEL.EXE, version 16.0.4266.1001, time stamp: 0x55ba1551 Faulting module name: BBjODBC.dll, version 14.1.1.0, time stamp: 0x5400df87 Exception code: 0xc0000005

这证实问题出在 BBj 驱动程序上。事实证明,负责更新该驱动程序的人员已经在服务器的所有硬盘驱动器上更新了它,但 Excel 决定使用的 C 驱动器除外。因此,尽管我们的技术人员声称一切都是最新的,但我们仍然使用五年前的驱动程序版本。我们目前正在等待更新驱动程序,希望这能解决问题。