При организации интеграции между 1С и сторонней СУБД Firebird разработчики часто используют подключение через COMОбъект("ADODB.Connection") с использованием ODBC-драйвера. Однако на этапе вызова метода Open() может возникнуть исключительная ситуация: [ODBC Firebird Driver]Unable to connect to data source: library 'gds32.dll' failed to load.
Проанализируем типовой пример кода, при выполнении которого возникает эта ошибка, выясним первопричины проблемы и подробно разберем по шагам способы ее устранения.
Посмотрим на пример кода подключения к удаленной базе данных Firebird, расположенной на сервере:
Соединение = Новый COMОбъект("ADODB.Connection");
Команда = Новый COMОбъект("ADODB.Command");
НаборЗаписей = Новый COMОбъект("ADODB.RecordSet");
ФайлЗагрузки = "192.168.1.120:/home/Work/db/base.fdb";
Соединение.ConnectionString = "driver=Firebird/InterBase(r) driver; Dialect=3; CHARSET=UTF8; Uid=SYSDBA; Pwd=masterkey; Dbname=" + ФайлЗагрузки;
Соединение.ConnectionTimeOut = 1200;
Соединение.CursorLocation = 3;
Попытка
Соединение.Open(Соединение.ConnectionString);
Сообщить("Соединение успешно установлено!");
Исключение
Сообщить("Нельзя установить соединение с Firebird: " + ОписаниеОшибки());
КонецПопытки;
Разберем, почему возникает ошибка загрузки gds32.dll, даже если драйвер Firebird ODBC корректно установлен в операционной системе:
gds32.dll или современной fbclient.dll). Если на рабочей станции или сервере установлен только ODBC-драйвер без клиентской части Firebird, подключение завершится ошибкой.rphost.exe, если код выполняется на сервере), установленного ODBC-драйвера и клиентских DLL должна строго совпадать:
- Для 32-разрядного клиента 1С требуются 32-разрядный ODBC-драйвер Firebird и 32-разрядная библиотека gds32.dll (в 64-разрядной Windows она должна находиться в папке C:\Windows\SysWOW64).
- Для 64-разрядного клиента или 64-разрядного сервера 1С требуются 64-разрядный ODBC-драйвер и 64-разрядная библиотека в каталоге C:\Windows\System32.
3050 (с помощью команды telnet 192.168.1.120 3050).Рассмотрим штатный способ генерации библиотеки совместимости gds32.dll из состава установленного клиента Firebird:
bin).instclient.exe i g
i g устанавливает файл gds32.dll. Если требуется установить только fbclient.dll, используется команда instclient.exe i f.Если нет возможности или прав администратора для копирования библиотек в системные директории Windows, мы можем явно указать драйверу, какую именно клиентскую библиотеку использовать, добавив параметр Client= в строку подключения.
Посмотрим на пример формирования строки подключения с явным путем к файлу:
Соединение = Новый COMОбъект("ADODB.Connection");
ПутьККлиенту = "C:\Program Files (x86)\Firebird\Firebird_3_0\fbclient.dll";
ФайлБазы = "192.168.1.120:/home/Work/db/base.fdb";
СтрокаПодключения = "driver=Firebird/InterBase(r) driver;"
+ "Client=" + ПутьККлиенту + ";"
+ "Dbname=" + ФайлБазы + ";"
+ "CHARSET=UTF8;"
+ "Dialect=3;"
+ "Uid=SYSDBA;"
+ "Pwd=masterkey;";
Соединение.ConnectionString = СтрокаПодключения;
Соединение.Open();
Разберем еще один практический вариант: если драйвер ищет библиотеку в путях переменной PATH или в каталоге вызывающего процесса, можно скопировать файл fbclient.dll (и при необходимости его копию, переименованную в gds32.dll) напрямую в каталог исполняемых файлов платформы 1С:
bin установленной версии платформы (туда, где находится 1cv8.exe для клиентского сеанса или rphost.exe для серверного вызова).При реализации интеграции обратим внимание на важные платформенные нюансы:
rphost.exe.COMОбъект и библиотека ADODB работают исключительно под управлением операционной системы Windows. Если сервер 1С функционирует на Linux, прямое подключение через COM-объекты невозможно. В таком случае подключение следует выполнять либо на клиенте под Windows, либо использовать внешние компоненты Native API, либо вызывать консольные утилиты (например, isql).