Каталог решений - Моя война с Adodb.connection Microsoft.Jet.OLEDB.4.0 на 64-х битных серверных ОС (86х)

Моя война с Adodb.connection Microsoft.Jet.OLEDB.4.0 на 64-х битных серверных ОС (86х)

Моя война с Adodb.connection Microsoft.Jet.OLEDB.4.0 на 64-х битных серверных ОС (86х)

В наличии

На тонком клиенте в управляемом приложении появилась потребность работы с Adodb.Connection. В моем случае это был драйвер "Microsoft.Jet.OLEDB.4.0".

В файловом варианте все взлетело без проблем… А вот в серверном начались проблемы. Решениям этих проблем и посвящается данная статья.

Категория:

Описание

При миграции приложений с 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 или конкретного пользователя.

http://pikucha.ru/iak8Z/thumbnail/ODBC+regedit.jpeg

Потом зарегистрировать DSN

http://pikucha.ru/iak9o/thumbnail/ODBC+manager.jpeg

Ну и провести подключение к Adodb.Connection:

DBConn = Новый COMОбъект("ADODB.Connection");
DBConn.Open("DSN=ODBC_DBase;Dbq=" + Path + ";");



После этого подключение взлетело и по аналогии можно подключить любой драйвер. 

Спасибо за внимание 😉 

has been added to your cart:
Оформление заказа