Currently trying to setup a development environment which can handle both 32-bit and 64-bit ODBC Informix Drivers.
I'm was unsuccessful at finding any sort of guide or walk through online, however I did find bits and pieces which could lead to the solution. I'd just like a little more advice to ensure I'm on the correct path.
Driver Versions
Version 3.70.TC3, Windows (32 bit)
Version 3.70.FC3, Windows x64
I can't seem to find versions 3.70.TC3 or 3.70.FC3, but I did find 3.70.TC7 and 3.70.FC7 directly from the IBM website, which I assume are just slightly updated versions.
Informix Driver Installations
The drivers are installed at the following locations (based on the registry entries)
- 32-bit: C:\Program Files (x86)\IBM\Informix\Client-SDK\
- 64-bit: C:\Program Files\IBM\Informix\Client-SDK\
Registry Entries
From what I can see, the registry entries for the drivers are located at:
- 32-bit: HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\ODBC\ODBC.INI
- 64-bit: HKEY_LOCAL_MACHINE\SOFTWARE\ODBC\ODBC.INI
This essentially lists all of the data sources and their connection details. Both locations have the same number of data sources with the same names and same key/value pairs, with the exception of the Driver
key which points to it's respective driver location; C:\Program Files\
or C:\Program Files (x86)\
.
ODBC Administrator
The 32-bit ODBC Administrator is found at %systemdrive%/Windows/SysWoW64/odbcad32.exe
Counterintuitively, the 64-bit ODBC Administrator is found at %systemdrive%/Windows/System32/odbcad32.exe
ODBC.INI
The ODBC.INI
file is located at C:\Windows\
where the contents of that file lists the same data sources as those displayed in ODBC Administrator, and includes the key/value pair of the 32-bit drivers for each of those data sources; Driver32=C:\Program Files\IBM\Informix\Client-SDK\bin\iclit09b.dll
.
Now what's interesting here is that although the key Driver32
is used, the value points to the C:\Program Files\
path as opposed to the C:\Program Files (x86)\
path, thereby associating the Driver32
to the 64-bit drivers.
I found the following page to explain this irregularity.
The WOW64 registry redirector intercepts calls made to certain portions of the registry and redirects them to another portion of the registry. Registry redirection affects the HKEY_LOCAL_MACHINE\SOFTWARE key. Registry calls made to this key by 32-bit applications are redirected to HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node. So, for example, when a 32-bit application calls SQLDataSources, the resultant registry call is redirected from HKEY_LOCAL_MACHINE\SOFTWARE\ODBC\ODBC.INI to HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\ODBC\ODBC.INI, and the only system data sources that are returned are ones for 32-bit ODBC drivers.
Simply put, a 32-bit application which connects to the 64-bit ODBC drivers will automatically be redirected to the 32-bit drivers based on the registry entries, whereas a 64-bit application will need no such redirection.
If a 32-bit application attempts to connect to a valid user data source for a 64-bit ODBC driver, the connection will succeed if a 32-bit version of the driver is installed. Otherwise, the connection will fail with the "architecture mismatch" error. For example, Microsoft’s SQL Server ODBC driver installs both a 64-bit library (%WINDIR%\System32\sqlsrv32.dll) and a 32-bit library (%WINDIR%\SysWOW64\sqlsrv32.dll) on 64-bit Windows platforms.
In the case of Informix, the driver for each architecture MUST be installed separately.
Questions
What is the importance of the ODBC.INI
file, and can I simply modify the Driver32
key to Driver64
or maybe have both in conjunction?
When executing the 32-bit ODBC Administrator and opening a data source I am able to modify the connection settings, however when executing the 64-bit version I receive the following error.
How can I change the system's current ODBC Administrator to the 64-bit version in order to avoid this error?