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

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

В процессе интеграции 1С с внешними базами данных, такими как MySQL или MariaDB, разработчики часто сталкиваются с системной ошибкой: «[Microsoft][Диспетчер драйверов ODBC] Источник данных не найден и не указан драйвер, используемый по умолчанию». При этом проверка связи в самом диспетчере ODBC может проходить успешно, что вводит в заблуждение. В этой статье мы подробно разберем причины возникновения этой ситуации, проанализируем программный код подключения и выясним, как правильно настроить окружение для стабильной работы.

Разберем главную причину: конфликт разрядности (32 vs 64 бита)

Проанализируем архитектуру операционной системы Windows. В 64-битных версиях существуют два независимых слоя для работы с ODBC. Это критически важный момент, который чаще всего становится источником проблем. Если ваше приложение 1С запущено как 32-битный процесс (что является стандартом для большинства тонких и толстых клиентов), оно физически «не видит» драйверы, установленные и настроенные в 64-битной консоли администрирования.

Рассмотрим, как правильно выбрать инструмент настройки:

  1. Для 32-битной 1С: необходимо использовать диспетчер по адресу C:\Windows\SysWOW64\odbcad32.exe. Только настроенные здесь системные DSN будут доступны 32-битному клиенту.
  2. Для 64-битной 1С (обычно это сервер приложений): используется стандартный диспетчер из панели управления или по адресу C:\Windows\System32\odbcad32.exe.

Выясним причину ошибки в рассматриваемой ситуации: автор установил 64-разрядный драйвер MySQL, в то время как клиент 1С работал в 32-разрядном режиме. В таком случае система выдает ошибку отсутствия драйвера, так как 32-битное приложение ищет его в своей ветке реестра и не находит.

Проанализируем правильную строку подключения

Для взаимодействия с MySQL/MariaDB из среды 1С мы используем технологию ADO (ActiveX Data Objects). Посмотрим на пример кода, который позволяет установить соединение. Обратите внимание, что мы не используем провайдер SQLOLEDB, так как он предназначен исключительно для Microsoft SQL Server. Вместо этого мы подключаемся напрямую через драйвер ODBC.

Рассмотрим программную реализацию:


ИмяСервераSQL = "192.168.1.100"; // IP-адрес или имя сервера
ПортSQL = "3306";               // Стандартный порт MySQL/MariaDB
ИмяДрайвера = "{MySQL ODBC 5.1 Driver}"; 
ПользовательSQL = "admin";
ПарольSQL = "my_password";
БазаДанныхSQL = "trade_db";

// Формируем строку соединения без использования DSN
СтрокаСоединения = "Driver=" + ИмяДрайвера + ";" +
                   "Server=" + ИмяСервераSQL + ";" +
                   "Port=" + ПортSQL + ";" +
                   "Uid=" + ПользовательSQL + ";" +
                   "Pwd=" + ПарольSQL + ";" +
                   "Database=" + БазаДанныхSQL + ";" +
                   "Option=3;"; // Опция для корректной работы с метаданными

Попытка
    Соединение = Новый COMОбъект("ADODB.Connection");
    Соединение.ConnectionString = СтрокаСоединения;
    Соединение.ConnectionTimeout = 30;
    Соединение.Open();
    Сообщить("Успешное подключение к MySQL!");
Исключение
    Сообщить("Не удалось подключиться: " + ОписаниеОшибки());
КонецПопытки;

В данном примере важно убедиться, что текст внутри Driver={...} точно совпадает с именем драйвера, указанным в колонке «Имя» на вкладке «Драйверы» в диспетчере ODBC. Любой лишний пробел или ошибка в версии приведет к отказу системы.

Пошаговая инструкция по настройке системного окружения

Рассмотрим последовательность действий для гарантированного подключения:

  1. Определяем разрядность 1С: Откройте диспетчер задач во время работы 1С. Если рядом с процессом 1cv8.exe стоит пометка "32 бита", вам нужен 32-битный драйвер.
  2. Устанавливаем драйвер: Скачайте с официального сайта MySQL или MariaDB драйвер нужной разрядности (Connector/ODBC). Рекомендуется устанавливать и 32-битную, и 64-битную версию для универсальности.
  3. Регистрация драйвера: Запустите odbcad32.exe из папки SysWOW64 (для 32-бит). Перейдите на вкладку «Системный DSN» и добавьте новое подключение, выбрав установленный драйвер.
  4. Тестирование: Нажмите кнопку «Test» в окне настройки драйвера. Если тест пройден, значит, параметры сети, логин и пароль верны.
  5. Проверка в 1С: Используйте приведенный выше код, указав точное имя драйвера, которое вы видели в списке при создании DSN.

Важные нюансы при работе с MariaDB

Хотя MariaDB является ответвлением MySQL, современные версии MariaDB лучше работают с собственным драйвером — MariaDB ODBC Connector. Проанализируем ситуацию: если вы используете функции, специфичные для последних версий MariaDB, старый драйвер MySQL 5.1 может работать нестабильно или искажать кодировку данных.

При использовании родного драйвера MariaDB строка подключения изменится незначительно:

ИмяДрайвера = "{MariaDB ODBC 3.1 Driver}";

Особенности выполнения кода на стороне сервера

Если ваше подключение выполняется в модуле с признаком &НаСервере, помните, что инициатором соединения выступает служба 1C:Enterprise Server. Рассмотрим два ключевых правила для серверного подключения:

Во-первых, драйвер ODBC должен быть установлен непосредственно на сервере, где запущен rphost. Настройка на локальном компьютере программиста в этом случае не имеет значения.

Во-вторых, права доступа. Служба 1С обычно запускается от имени специального пользователя (например, USR1CV8). Убедитесь, что у этого пользователя есть права на чтение веток реестра, где хранятся настройки ODBC, и доступ к библиотекам драйвера (DLL-файлам).

Заключение

Мы выяснили, что ошибка «Источник данных не найден» в 90% случаев не связана с неправильным кодом в 1С. Это системная проблема несовпадения разрядности приложения и драйвера. Для успешного решения задачи всегда проверяйте, какой именно odbcad32.exe вы используете для настройки, и устанавливайте драйверы обеих разрядностей, чтобы обеспечить работу кода как на клиенте, так и на сервере.

← На главную