В процессе интеграции 1С с внешними базами данных, такими как MySQL или MariaDB, разработчики часто сталкиваются с системной ошибкой: «[Microsoft][Диспетчер драйверов ODBC] Источник данных не найден и не указан драйвер, используемый по умолчанию». При этом проверка связи в самом диспетчере ODBC может проходить успешно, что вводит в заблуждение. В этой статье мы подробно разберем причины возникновения этой ситуации, проанализируем программный код подключения и выясним, как правильно настроить окружение для стабильной работы.
Проанализируем архитектуру операционной системы Windows. В 64-битных версиях существуют два независимых слоя для работы с ODBC. Это критически важный момент, который чаще всего становится источником проблем. Если ваше приложение 1С запущено как 32-битный процесс (что является стандартом для большинства тонких и толстых клиентов), оно физически «не видит» драйверы, установленные и настроенные в 64-битной консоли администрирования.
Рассмотрим, как правильно выбрать инструмент настройки:
C:\Windows\SysWOW64\odbcad32.exe. Только настроенные здесь системные DSN будут доступны 32-битному клиенту.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. Любой лишний пробел или ошибка в версии приведет к отказу системы.
Рассмотрим последовательность действий для гарантированного подключения:
1cv8.exe стоит пометка "32 бита", вам нужен 32-битный драйвер.odbcad32.exe из папки SysWOW64 (для 32-бит). Перейдите на вкладку «Системный DSN» и добавьте новое подключение, выбрав установленный драйвер.Хотя 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 вы используете для настройки, и устанавливайте драйверы обеих разрядностей, чтобы обеспечить работу кода как на клиенте, так и на сервере.