Как исправить ошибку «Источник данных не найден и не указан драйвер» при вызове ADODB.Connection в 1С?

Программист 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

При интеграции 1С с внешними базами данных (например, MySQL, PostgreSQL или MS SQL Server) разработчики часто используют COM-объект ADODB.Connection. Однако при обновлении платформы 1С или изменении разрядности клиента/сервера стандартный код подключения может внезапно перестать работать.

Рассмотрим стандартную последовательность команд для подключения к базе данных:


Соединение = Новый COMОбъект("ADODB.Connection");
Соединение.ConnectionString = СтрокаПодключения; 
Соединение.ConnectionTimeout = 180;
Соединение.CursorLocation = 3;

Попытка
    Соединение.Open();
Исключение
    Сообщение = Новый СообщениеПользователю;
    Сообщение.Текст = ОписаниеОшибки();
    Сообщение.Сообщить();
КонецПопытки;

Если на этапе выполнения метода Open() возникает исключительная ситуация вида «Произошла исключительная ситуация (Microsoft OLE DB Provider for ODBC Drivers): [Microsoft][Диспетчер драйверов ODBC] Источник данных не найден и не указан драйвер, используемый по умолчанию», то проблема заключается в нестыковке системных компонентов. Разберем подробнее причины возникновения этой ошибки и варианты ее решения.

Причина ошибки: несоответствие разрядности (x86 и x64)

Проанализируем механику работы COM-объекта ADODB.Connection. Этот объект вместе с провайдером OLE DB для ODBC (MSDASQL) загружается непосредственно в память процесса, выполняющего код 1С:

  1. При вызове на клиенте — в процесс тонкого или толстого клиента (1cv8.exe или 1cv8c.exe).
  2. При вызове на сервере (в фоновых заданиях или процедурах с директивой &НаСервере) — в рабочий процесс сервера 1С (rphost.exe).

Операционная система Windows строго разделяет 32-битные и 64-битные библиотеки и драйверы. Если процесс 1С имеет разрядность 32-bit (x86), он способен обратиться только к 32-битным драйверам ODBC. Если рабочий процесс 1С имеет разрядность 64-bit (x64), ему требуется 64-битный драйвер ODBC.

В 64-разрядных операционных системах Windows присутствуют два независимых диспетчера источников данных ODBC:

  1. 64-разрядный диспетчер: C:\Windows\System32\odbcad32.exe
  2. 32-разрядный диспетчер: C:\Windows\SysWOW64\odbcad32.exe

Если в системе установлен, например, 64-битный драйвер (например, mysql-connector-odbc-winx64), а код выполняется в 32-битной платформе 1С, диспетчер ODBC не сможет найти нужный драйвер и выдаст вышеуказанное исключение.

Решение 1: Установка драйвера требуемой разрядности

Выясним разрядность приложения, исполняющего код (клиентский модуль 1С или серверный процесс rphost.exe), и установим соответствующую версию драйвера ODBC:

  1. Если используется 32-битный клиент или сервер 1С, скачаем и установим 32-битную версию ODBC-драйвера (например, mysql-connector-odbc-5.3.6-winx32.msi).
  2. Если используется 64-битный сервер 1С, обязательно установим 64-битную версию ODBC-драйвера (winx64).

Совет: В системе Windows можно одновременно установить и 32-битную, и 64-битную версии одного и того же ODBC-драйвера. Это гарантирует корректную работу как клиентских, так и серверных вызовов 1С.

Решение 2: Проверка типа источника данных (System DSN vs User DSN)

Если подключение выполняется с использованием имени DSN (Data Source Name), необходимо учитывать контекст безопасности учетной записи:

  1. Сервер 1С запускается от имени системной службы (например, usr1cv8) и не имеет доступа к **Пользовательским DSN (User DSN)**, созданным под учетной записью администратора.
  2. Создавайте DSN исключительно на вкладке «Системный DSN» (System DSN) через соответствующую утилиту (из папки System32 для x64 или SysWOW64 для x86).

Решение 3: Использование Служб компонентов (COM+) при разных разрядностях

Если сервер 1С является 64-разрядным, а внешняя СУБД или поставщик данных предоставляет только 32-разрядный COM-компонент или драйвер, можно настроить межпроцессное взаимодействие через обертку COM+:

  1. Откроем оснастку «Службы компонентов» (команда dcomcnfg).
  2. Перейдем в раздел «Компьютеры» -> «Мой компьютер» -> «Приложения COM+».
  3. Создадим новое приложение COM+ с типом запуска «Серверное приложение» (Server Application).
  4. Добавим необходимый COM-компонент в созданное приложение.

При таком подходе 64-битный процесс 1С будет обращаться к 32-битному COM-объекту через специальный суррогатный процесс Windows (comhost.exe).

Альтернативные варианты интеграции в 1С

В современных конфигурациях 1С рекомендуется по возможности уходить от прямого использования `ADODB.Connection` в пользу штатных механизмов платформы:

  1. Внешние источники данных: Встроенный объект метаданных 1С. Позволяет подключать таблицы сторонних СУБД (MS SQL, MySQL, PostgreSQL, Oracle) напрямую в дерево конфигурации и работать с ними с помощью обычных запросов 1С.
  2. HTTP-сервисы и REST API: Взаимодействие через объекты HTTPСоединение и HTTPЗапрос. Данный подход полностью кроссплатформенен (работает как под Windows, так и под Linux) и не зависит от разрядности установленных в системе драйверов.
← На главную