В настоящее время пытаюсь настроить среду разработки, которая может обрабатывать как 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
Драйверы установлены в следующих местах (на основе записей реестра)
Записи в реестре
Насколько я могу судить, записи реестра для драйверов расположены по адресу:
По сути, здесь перечислены все источники данных и детали их подключения. Оба расположения имеют одинаковое количество источников данных с одинаковыми именами и одинаковыми парами ключ / значение, за исключением 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-разрядная версия драйвера. В противном случае соединение не будет установлено с ошибкой «несоответствие архитектуры». Например, драйвер ODBC Microsoft SQL Server устанавливает оба 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.