Как исправить ошибку «Источник данных не найден и не указан драйвер» при подключении 1С к MySQL

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

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

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

Рассмотрим подробно причины возникновения этой проблемы и разберем по шагам варианты ее решения.

Главная причина: Несоответствие разрядности (32/64 бит)

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

  1. 64-разрядная подсистема — используется 64-битными приложениями. Настройка источника данных выполняется через диспетчер odbcad32.exe, расположенный в каталоге C:\Windows\System32.
  2. 32-разрядная подсистема — используется 32-битными приложениями. Настройка источника данных выполняется через диспетчер odbcad32.exe из каталога C:\Windows\SysWOW64.

Если на компьютере установлен 32-разрядный клиент 1С (каталог установки по умолчанию — C:\Program Files (x86)\1cv8\...), он может работать исключительно с 32-разрядными ODBC-драйверами. Если при этом в системе зарегистрирован только 64-битный драйвер MySQL ODBC (или источник настроен только в 64-битном диспетчере), платформа 1С не сможет его обнаружить и выведет ошибку.

Шаги по устраненю расхождения разрядности

Проанализируем способы устранения конфликта разрядности:

  1. Установка 64-разрядного клиента 1С: Если в системе установлен 64-битный драйвер MySQL, установите или запустите 64-битную версию платформы 1С:Предприятие. Она располагается в каталоге C:\Program Files\1cv8\....
  2. Установка 32-разрядного драйвера MySQL ODBC: Если необходимо использовать 32-разрядный клиент 1С, скачайте и установите 32-битную (x86) версию драйвера MySQL Connector/ODBC. После установки настройте DSN через 32-битный диспетчер ODBC (C:\Windows\SysWOW64\odbcad32.exe).

Дополнительные факторы, вызывающие ошибку

Если разрядность приложения и драйвера совпадает, но ошибка сохраняется, выясним другие возможные причины:

  1. Точное наименование драйвера в строке подключения: Значение параметра DRIVER={...} должно полностью, символ в символ, совпадать с именем драйвера в диспетчере ODBC. Драйверы MySQL отличаются версиями и кодировкой (например, MySQL ODBC 5.3 Unicode Driver, MySQL ODBC 5.3 ANSI Driver или MySQL ODBC 8.0 Unicode Driver).
  2. Контекст выполнения кода (Клиент или Сервер): Если подключение выполняется на стороне сервера 1С (в процедуре с директивой &НаСервере), разрядность драйвера должна соответствовать разрядности службы кластера 1С, а сам драйвер должен быть установлен непосредственно на сервере приложений.
  3. Тип DSN при серверном выполнении: При вызове из кода, исполняемого под учетной записью службы (например, службы сервера 1С), источник данных должен быть настроен на вкладке «Системный DSN» (System DSN). Источники с вкладки «Пользовательский DSN» недоступны другим пользователям и службам.

Пример кода для подключения к MySQL из 1С

Рассмотрим пример правильной организации подключения к СУБД MySQL с помощью COM-объекта ADODB.Connection и обработки возможной ошибки:


АДОСоединение = Новый COMОбъект("ADODB.Connection");

Если АДОСоединение.State = 0 Тогда // 0 - состояние adStateClosed
    SRV  = "192.168.1.8";  // Адрес сервера MySQL
    DB   = "autoshop";     // Имя базы данных MySQL
    UID  = "root";         // Имя пользователя
    PWD  = "password";     // Пароль пользователя
    PORT = "3306";         // Порт сервера
    
    // Формируем строку подключения с указанием точного имени драйвера
    СтрокаПодключения = "DRIVER={MySQL ODBC 5.3 Unicode Driver};"
                      + "SERVER=" + SRV + ";"
                      + "PORT=" + PORT + ";"
                      + "DATABASE=" + DB + ";"
                      + "UID=" + UID + ";"
                      + "PWD=" + PWD + ";"
                      + "Option=3;"; // Дополнительные параметры соединения
                      
    Попытка
        АДОСоединение.ConnectionString = СтрокаПодключения;
        АДОСоединение.Open();
        Сообщить("Подключение к MySQL успешно установлено!");
    Исключение
        АДОСоединение = Неопределено;
        Сообщить("Ошибка при подключении к MySQL: " + ОписаниеОшибки());
    КонецПопытки;
КонецЕсли;

Обратите внимание: Для передачи пароля в драйверах MySQL ODBC стандартом является параметр PWD. Также для корректной работы с кодировками рекомендуется передавать системные параметры инициализации, например параметр кодировки CHARSET=utf8mb4 в строке соединения.

← На главную