ODBC Error: Driver not capable

ODBC Error: Driver not capable

我正在开发的应用程序中与 AS/400 建立 ODBC 连接。它只是执行 DELETE,然后执行 INSERT。没有什么疯狂或复杂的。在我的 64 位 Windows 7 Pro 桌面上一切正常(更新:不再正确)但是当我尝试 运行 我的 32 位笔记本电脑上的应用程序进行演示时,我收到以下错误:

ERROR [S1C00] [Micro Focus][Rumba Data Access][S1023934]Driver not capable. SQLSetConnectOption ERROR [IM006] [Microsoft][ODBC Driver Manager] Driver's SQLSetConnectAttr failed ERROR [01000][Microsoft][ODBC Driver Manager] The driver doesn't support the version of ODBC behavior that tha pplication requested (see SQLSetEnvAttr). ERROR [08004][Micro Focus][RUMBA Data Access][S1023934]Data source rejected establishment of connection. APPC Primary RC = Allocation_Error; Secondary RC = Allocation_Failure_No_Retry.

我不确定发生了什么。在 32 位笔记本电脑上设置 DSN 时,我可能搞砸了,但它看起来与我在 64 位台式机上设置的完全一样……32 位和 64 位之间有什么不同吗版本还是有其他事情发生?

谢谢!

编辑:我刚在另一个 64 位桌面上试过,我得到了同样的错误。我设置 DSN 的方式一定有问题,因为我几个月前在我的机器上设置它并且可能会忘记一些东西。

EDIT2:我 运行 Windows 在桌面上进行更新,一切正常,但现在也无法正常工作。有问题的 Windows 更新是否可能导致我的问题?

EDIT3:评论中要求我启用跟踪并查看会发生什么。浏览它,这里有一些值得注意的消息:

EXIT SQLDriverConnectW with return code -1 (SQL_ERROR)

和:

EXIT SQLGetDiagRecW with return code 100 (SQL_NO_DATA_FOUND)

其他一切看起来都以状态 0 退出 (SQL_SUCCESS)

使用 ODBC 管理器,打开跟踪。尝试您的应用程序并查看 SQL_ATTR_ODBC_VERSION 的日志文件。你应该看到这样的东西:

odbct32w        fc0-1ad0    ENTER SQLSetEnvAttr 
        SQLHENV             0x007A1DE0
        SQLINTEGER                 200 <SQL_ATTR_ODBC_VERSION>
        SQLPOINTER                 3 <SQL_OV_ODBC3>
        SQLINTEGER                   0 

odbct32w        fc0-1ad0    EXIT  SQLSetEnvAttr  with return code 0 (SQL_SUCCESS)
        SQLHENV             0x007A1DE0
        SQLINTEGER                 200 <SQL_ATTR_ODBC_VERSION>
        SQLPOINTER                 3 <SQL_OV_ODBC3>
        SQLINTEGER                   0 

不同之处在于您返回的是 SQL_ERROR 而不是成功。检查第三个参数是什么(在我的例子中是SQL_OV_ODBC3)。您的应用程序设置的版本很可能比您的 ODBC 驱动程序支持的版本更新。您需要避免使用较新的 ODBC 功能或将您的驱动程序升级到支持更高级别 ODBC 的驱动程序。

安装此 Microsoft Visual C++ 2005 Service Pack 1 Redistributable Package MFC Security Update 后问题已解决。

根据微软的说法,

A security issue has been identified leading to a vulnerability in MFC applications that are built with Visual Studio 2005 and ship the Microsoft Visual C++ 2005 Service Pack 1 Redistributable Package.

为什么安装安全补丁(而不是错误修复补丁)解决了我无法解决的问题...