В настоящее время пытаюсь настроить среду разработки, которая может обрабатывать как 32-разрядные, так и 64-разрядные драйверы ODBC Informix.
I Мне не удалось найти какой-либо путеводитель или пройтись по сети, однако я нашел кусочки, которые могли привести к решению. Мне просто нужен еще один совет, чтобы убедиться, что я нахожусь на правильном пути.
Версии драйверов
Версия 3.70.TC3, Windows (32 бит)
Версия 3.70.FC3, Windows x64
Кажется, я не могу найти версии 3.70.TC3 или 3.70.FC3 , но я нашел 3.70.TC7 и 3.70.FC7 непосредственно с веб-сайта IBM, которые, как я полагаю, представляют собой лишь слегка обновленные версии.
Установка драйверов Informix
Драйверы устанавливаются в следующих местах (на основе записи реестра)
Записи реестра
Насколько я могу судить, записи реестра для драйверов расположены по адресу:
По сути, здесь перечислены все источники данных и детали их подключения. Оба расположения имеют одинаковое количество источников данных с одинаковыми именами и одинаковыми парами ключ / значение, за исключением ключа 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 Administrator, и включены пары ключ / значение 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 драйверы.
Проще говоря, 32-битное приложение, которое подключается к 64-битным драйверам ODBC, будет автоматически перенаправлено на 32-битные драйверы на основе записей реестра, тогда как 64-битное приложение не нуждается в таком перенаправлении.
Если 32-разрядное приложение пытается подключиться к допустимым данным пользователя источник для 64-битного драйвера ODBC, соединение будет успешным, если Установлена 32-битная версия драйвера. В противном случае подключение завершится ошибкой "несоответствие архитектуры". Например, Драйвер Microsoft SQL Server ODBC устанавливает 64-разрядную библиотеку. (% WINDIR% \ System32 \ sqlsrv32.dll) и 32-битную библиотеку (% WINDIR% \ SysWOW64 \ sqlsrv32.dll) на 64-битных платформах Windows.
В случае Informix драйвер для каждой архитектуры ДОЛЖЕН быть установлен отдельно.
Какова важность ODBC.INI
, и могу ли я просто изменить ключ Driver32
на Driver64
или, может быть, оба вместе?
При выполнении 32-битного ODBC Администратор и открытие источника данных. Я могу изменить настройки подключения, однако при выполнении 64-разрядной версии я получаю следующую ошибку.
Как я могу изменить текущего администратора ODBC системы на 64-разрядную версию, чтобы избежать этой ошибки?
Проблема заключалась в том, что я изначально установил версию 3.50. Эта версия больше не поддерживается и также не имеет 64-битного аналога.
Решением было установить последние версии драйверов 4.1.