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.
Version 3.70.TC3, Windows (32 bit)
Version 3.70.FC3, Windows x64
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\
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)\.
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 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;
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.
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?