目前正在尝试设置一个可以处理 32 位和 64 位 ODBC Informix 驱动程序的开发环境。
我没有成功找到任何类型的指南或在线浏览,但我确实找到了可能导致解决方案的点点滴滴。我只是想要更多的建议,以确保我走在正确的道路上。
驱动程序版本
版本 3.70.TC3,Windows(32 位)
版本 3.70.FC3,Windows x64
我似乎找不到3.70.TC3或3.70.FC3版本,但我确实直接从 IBM 网站找到了 3.70.TC7和3.70.FC7 ,我认为它们只是稍微更新的版本。
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/ SysWoW64 /odbcad32.exe
与直觉相反,64 位 ODBC 管理器位于 %systemdrive%/Windows/ System32 /odbcad32.exe
ODBC.INI
该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 位版本以避免此错误?