当前正在尝试设置一个可以处理 32 位和 64 位 ODBC Informix 驱动程序的开发环境。
我在网上找不到任何指南或教程,但我确实找到了一些可以解决问题的零碎信息。我只是想要多一点建议,以确保我走在正确的道路上。
驱动程序版本
版本 3.70.TC3,Windows(32 位)
版本 3.70.FC3,Windows x64
我似乎找不到版本3.70.TC3或者3.70.FC3,但我发现3.70.TC7和3.70.FC7直接从 IBM 网站获取,我认为这些只是稍微更新的版本。
Informix 驱动程序安装
驱动程序安装在以下位置(基于注册表项)
- 32 位:C:\Program Files (x86)\IBM\Informix\Client-SDK\
- 64 位:C:\Program Files\IBM\Informix\Client-SDK\
注册表项
据我所知,驱动程序的注册表项位于:
- 32 位:HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\ODBC\ODBC.INI
- 64 位:HKEY_LOCAL_MACHINE\SOFTWARE\ODBC\ODBC.INI
Driver
这实际上列出了所有数据源及其连接详细信息。两个位置都具有相同数量的数据源,这些数据源具有相同的名称和相同的键/值对,但指向其各自驱动程序位置的键除外;C:\Program Files\
或C:\Program Files (x86)\
。
ODBC 管理员
32 位 ODBC 管理器位于 %systemdrive%/Windows/系统WoW64/odbcad32.exe
与直觉相反,64 位 ODBC 管理器位于 %systemdrive%/Windows/System32/odbcad32.exe
数据库连接配置文件
该ODBC.INI
文件位于C:\Windows\
其中,该文件的内容列出了与 ODBC 管理器中显示的相同的数据源,并包括每个数据源的 32 位驱动程序的键/值对;Driver32=C:\Program Files\IBM\Informix\Client-SDK\bin\iclit09b.dll
。
现在有趣的是,虽然使用了键Driver32
,但值指向的是C:\Program Files\
路径而不是路径C:\Program Files (x86)\
,从而将其Driver32
与 64 位驱动程序相关联。
我发现以下内容页来解释这种不规则现象。
WOW64 注册表重定向器会拦截对注册表某些部分的调用,并将其重定向到注册表的另一部分。注册表重定向会影响 HKEY_LOCAL_MACHINE\SOFTWARE 键。32 位应用程序对此项进行的注册表调用被重定向至 HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node。因此,例如,当 32 位应用程序调用 SQLDataSources 时,生成的注册表调用将从 HKEY_LOCAL_MACHINE\SOFTWARE\ODBC\ODBC.INI 重定向到 HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\ODBC\ODBC.INI,并且返回的唯一系统数据源是 32 位 ODBC 驱动程序的数据源。
简而言之,连接到 64 位 ODBC 驱动程序的 32 位应用程序将根据注册表项自动重定向到 32 位驱动程序,而 64 位应用程序则不需要这样的重定向。
如果 32 位应用程序尝试连接到 64 位 ODBC 驱动程序的有效用户数据源,则如果安装了 32 位版本的驱动程序,则连接将会成功。否则,连接将失败并出现“架构不匹配”错误。例如,Microsoft 的 SQL Server ODBC 驱动程序会同时安装64 位 Windows 平台上有一个 64 位库 (%WINDIR%\System32\sqlsrv32.dll) 和一个 32 位库 (%WINDIR%\SysWOW64\sqlsrv32.dll)。
对于 Informix 来说,必须单独安装每种架构的驱动程序。
问题
该文件的重要性是什么ODBC.INI
?我可以简单地修改Driver32
密钥Driver64
或者将两者结合起来吗?
执行 32 位 ODBC 管理器并打开数据源时,我可以修改连接设置,但是执行 64 位版本时,我收到以下错误。
如何将系统当前的 ODBC 管理器更改为 64 位版本以避免此错误?
答案1
问题是我最初安装的是 3.50 版本。此版本不再受支持,并且没有 64 位版本。
解决方案是安装最新的 4.1 驱动程序。