При интеграции 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] Источник данных не найден и не указан драйвер, используемый по умолчанию», то проблема заключается в нестыковке системных компонентов. Разберем подробнее причины возникновения этой ошибки и варианты ее решения.
Проанализируем механику работы COM-объекта ADODB.Connection. Этот объект вместе с провайдером OLE DB для ODBC (MSDASQL) загружается непосредственно в память процесса, выполняющего код 1С:
1cv8.exe или 1cv8c.exe).&НаСервере) — в рабочий процесс сервера 1С (rphost.exe).Операционная система Windows строго разделяет 32-битные и 64-битные библиотеки и драйверы. Если процесс 1С имеет разрядность 32-bit (x86), он способен обратиться только к 32-битным драйверам ODBC. Если рабочий процесс 1С имеет разрядность 64-bit (x64), ему требуется 64-битный драйвер ODBC.
В 64-разрядных операционных системах Windows присутствуют два независимых диспетчера источников данных ODBC:
C:\Windows\System32\odbcad32.exeC:\Windows\SysWOW64\odbcad32.exeЕсли в системе установлен, например, 64-битный драйвер (например, mysql-connector-odbc-winx64), а код выполняется в 32-битной платформе 1С, диспетчер ODBC не сможет найти нужный драйвер и выдаст вышеуказанное исключение.
Выясним разрядность приложения, исполняющего код (клиентский модуль 1С или серверный процесс rphost.exe), и установим соответствующую версию драйвера ODBC:
mysql-connector-odbc-5.3.6-winx32.msi).winx64).Совет: В системе Windows можно одновременно установить и 32-битную, и 64-битную версии одного и того же ODBC-драйвера. Это гарантирует корректную работу как клиентских, так и серверных вызовов 1С.
Если подключение выполняется с использованием имени DSN (Data Source Name), необходимо учитывать контекст безопасности учетной записи:
usr1cv8) и не имеет доступа к **Пользовательским DSN (User DSN)**, созданным под учетной записью администратора.System32 для x64 или SysWOW64 для x86).Если сервер 1С является 64-разрядным, а внешняя СУБД или поставщик данных предоставляет только 32-разрядный COM-компонент или драйвер, можно настроить межпроцессное взаимодействие через обертку COM+:
dcomcnfg).При таком подходе 64-битный процесс 1С будет обращаться к 32-битному COM-объекту через специальный суррогатный процесс Windows (comhost.exe).
В современных конфигурациях 1С рекомендуется по возможности уходить от прямого использования `ADODB.Connection` в пользу штатных механизмов платформы:
HTTPСоединение и HTTPЗапрос. Данный подход полностью кроссплатформенен (работает как под Windows, так и под Linux) и не зависит от разрядности установленных в системе драйверов.