При интеграции 1С со сторонними учетными системами или кассовым ПО разработчики часто сталкиваются с необходимостью прямого чтения или записи данных в СУБД Firebird. Однако при попытке установить соединение через COM-объект ADODB.Connection нередко возникает ошибка: «Источник данных не найден и не указан драйвер, используемый по умолчанию».
В этой статье мы подробно разберем, почему возникает данная ошибка, как правильно сформировать строку подключения, какие нюансы необходимо учесть при работе с разрядностью библиотек и какие существуют альтернативные способы взаимодействия с Firebird.
Проанализируем основные факторы, вызывающие сбой при попытке вызова метода Open объекта ADODB.Connection:
®, скопированные из справочников, диспетчер ODBC Windows не всегда может сопоставить с записью в реестре. Точное имя драйвера, зарегистрированного в системе, обычно пишется как Firebird/InterBase(r) driver или заключается в фигурные скобки.fbclient.dll (или gds32.dll). Если путь к ней не указан в параметре client или библиотека отсутствует в системных каталогах, подключение завершится ошибкой.Разберем рабочий пример формирования строки подключения. Для стабильной работы обязательно укажем драйвер, путь к серверу и файлу базы данных, учетные данные, кодировку и полный путь к библиотеке fbclient.dll.
Посмотрим на пример строки подключения:
Соединение = Новый COMОбъект("ADODB.Connection");
Соединение.ConnectionTimeOut = 60;
Соединение.CursorLocation = 3; // adUseClient
СтрокаПодключения = "Driver=Firebird/InterBase(r) driver;"
+ "Dbname=192.168.151.225/3050:D:\CR\MAIN.GDB;"
+ "UID=SYSDBA;"
+ "PWD=masterkey;"
+ "CHARSET=WIN1251;"
+ "client=C:\Program Files (x86)\FireBird\FireBird_2_1\BIN\fbclient.dll;";
Попытка
Соединение.Open(СтрокаПодключения);
Сообщить("Соединение с базой Firebird успешно установлено!");
Исключение
Сообщить("Не удалось подключиться к базе Firebird: " + ОписаниеОшибки());
КонецПопытки;
Рассмотрим пример готовой функции на языке 1С, принимающей структуру параметров и возвращающей инициализированный объект соединения. В функции предусмотрена проверка обязательных реквизитов и экранирование спецсимволов.
Функция ПодключитьFireBird(ПараметрыПодключения, ОбъектПодключения) Экспорт
Перем АдресСервера;
Перем ПутьКБазе;
Перем Пользователь;
Перем Пароль;
Перем Кодировка;
Если НЕ ПараметрыПодключения.Свойство("Сервер", АдресСервера) Тогда
АдресСервера = "127.0.0.1";
КонецЕсли;
Если НЕ ПараметрыПодключения.Свойство("База", ПутьКБазе) Тогда
ВызватьИсключение "Не указан путь к базе данных Firebird!";
КонецЕсли;
Если НЕ ПараметрыПодключения.Свойство("Пользователь", Пользователь) Тогда
Пользователь = "SYSDBA";
КонецЕсли;
Если НЕ ПараметрыПодключения.Свойство("Пароль", Пароль) Тогда
Пароль = "masterkey";
КонецЕсли;
Если НЕ ПараметрыПодключения.Свойство("Кодировка", Кодировка) Тогда
Кодировка = "WIN1251";
КонецЕсли;
Попытка
ОбъектПодключения = Новый COMОбъект("ADODB.Connection");
Исключение
ВызватьИсключение "Ошибка создания объекта ADODB.Connection: " + ОписаниеОшибки();
КонецПопытки;
// Экранируем кавычки в пути к базе при необходимости
ПутьКБазе = СтрЗаменить(ПутьКБазе, """", """""");
СтрокаПодключения = "Driver=Firebird/Interbase(r) driver;"
+ "Dialect=3;"
+ "CHARSET=" + Кодировка + ";"
+ "DBNAME=" + АдресСервера + ":" + ПутьКБазе + ";";
Попытка
ОбъектПодключения.Open(СтрокаПодключения, Пользователь, Пароль);
Возврат Истина;
Исключение
ОбъектПодключения = Неопределено;
ВызватьИсключение "Ошибка подключения к Firebird: " + ОписаниеОшибки();
КонецПопытки;
КонецФункции
Разберем по шагам правила настройки окружения, если код выполняется на стороне сервера 1С (например, в фоновом или регламентном задании):
1C:Enterprise Server.USR1CV8), должен иметь права на чтение каталога с файлом fbclient.dll и доступ к веткам реестра HKEY_LOCAL_MACHINE\SOFTWARE\ODBC.Рассмотрим другие подходы к интеграции, которые могут оказаться удобнее или стабильнее в зависимости от архитектуры проекта:
HTTPСоединение.При выборке данных через объект ADODB.Recordset обратите внимание на следующие нюансы:
GetChunk() или считывание через ADODB.Stream.Value может вызывать исключение типов в 1С. В тексте SQL-запроса рекомендуется оборачивать потенциально пустые поля функцией COALESCE(Поле, '').