При миграции приложений с MSSQL 2005 и Server 2003 в MSSQL 2008 x64 и Server 2008 x64, я столкнулся с проблемой с ODBC-соединения. Приложение использует системный DSN для подключения к ODBC. Настройки были идентичны , в пределах менеджера ODBC работал.
Оказывается, что 32-разрядные приложения не видят уведомления о доставке данных созданных в 64-битном менеджере ODBC, и будет выполнена одна из ошибок описаных ниже.
32-разрядный ODBC Manager находится в C: \ Windows \ SysWOW64 \ odbcad32.exe
При выполнении кода подключения на сервере
DBConn = Новый COMОбъект("ADODB.Connection"); DBConn.Open("Provider=Microsoft.Jet.OLEDB.4.0;" + "Data Source=" + Path + ";" + "Extended Properties=""DBASE IV;"";");
Возникала исключительная ситуация
(Microsoft OLE DB Provider for ODBC Drivers): [Microsoft][ODBC Driver Manager] Data source name not found and no default driver specified
Причем на файловой базе все происходило без проблем.
Схема базы:
Серверная 1С "крутилась" на отдельном физическом сервере. Подключение происходило через терминальный сервер (Так же отдельный физический)
Суть проблемы и решение:
Оказывается Сервер на котором крутился SQL не хотел давать доступ напрямую к реестру и *.dll, которые находились удаленно, а пытался поднять эти библиотеки не пользователь терминального сервера на клиенте, а пользователь от которого была запущена служба сервера 1С на SQL-e (USR1CV82 по дефолту)...
Для адекватной работы нам необходимо дать права на чтение по ключу реестра HKLM\SOFTWARE\ODBC\ODBC.INI для everyone или конкретного пользователя.
Потом зарегистрировать DSN
Ну и провести подключение к Adodb.Connection:
DBConn = Новый COMОбъект("ADODB.Connection"); DBConn.Open("DSN=ODBC_DBase;Dbq=" + Path + ";");
После этого подключение взлетело и по аналогии можно подключить любой драйвер.
Спасибо за внимание ;)