Как подключиться к базе данных MySQL из 1С с помощью ADODB?

Программист IT и автоматизация бизнеса
← На главную

Интеграция 1С с внешними системами — частая задача для разработчика. Часто данные, например, с веб-сайта, хранятся в базе данных MySQL. В этой статье мы подробно разберем, как настроить соединение из 1С к MySQL, используя технологию ADODB, и какие "подводные камни" могут встретиться на пути. Проанализируем типичную ситуацию: вы установили MySQL (например, в составе пакета XAMPP), создали базу, но 1С отказывается к ней подключаться. Давайте выясним причину и настроим все по шагам.

Ключевой элемент — ODBC-драйвер

Прежде всего, нужно понять, что 1С не умеет напрямую "общаться" с MySQL. Для этого нужен специальный посредник — ODBC-драйвер (Open Database Connectivity). Он выступает в роли переводчика, который преобразует запросы от 1С в команды, понятные для MySQL, и возвращает данные обратно. Именно от правильности выбора и настройки этого компонента зависит 90% успеха.

Поэтому первый и главный шаг — это установка официального ODBC-драйвера для MySQL (часто его называют MySQL Connector/ODBC). Скачать его можно с официального сайта MySQL.

Критически важный момент: разрядность драйвера и платформы 1С

Это самая частая причина, по которой соединение не устанавливается, даже если все остальные настройки верны. Разрядность (битность) установленного ODBC-драйвера обязательно должна совпадать с разрядностью клиента "1С:Предприятие", из которого вы запускаете код.

Как это работает в Windows x64?

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

  1. Для настройки 64-разрядных драйверов используется утилита: %SYSTEMROOT%\System32\odbcad32.exe
  2. Для настройки 32-разрядных драйверов используется: %SYSTEMROOT%\SysWOW64\odbcad32.exe

Если вы установили 32-разрядный драйвер, но пытаетесь настроить его через 64-разрядную утилиту (которая обычно открывается по умолчанию из "Панели управления"), вы его там просто не увидите. И наоборот. Это вводит в заблуждение и создает впечатление, что драйвер не установился. Всегда проверяйте, что работаете в администраторе ODBC нужной разрядности!

Настройка подключения и строка соединения в 1С

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

Рассмотрим самый универсальный способ — без предварительного создания DSN (Data Source Name), когда все параметры указываются прямо в коде. Это делает ваше решение более переносимым.

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

Давайте посмотрим на готовый пример кода, который можно использовать в качестве основы. Разберем его по частям.


// Определим параметры для нашего подключения
Сервер       = "localhost"; // или 127.0.0.1, если MySQL на том же компьютере
БазаДанных   = "my_database"; // Имя вашей базы данных в MySQL
Пользователь = "root"; // Имя пользователя MySQL
Пароль       = "your_password"; // Пароль пользователя
ИмяДрайвера  = "MySQL ODBC 8.0 Unicode Driver"; // Точное имя драйвера

// Сформируем строку подключения
СтрокаПодключения = "DRIVER={" + ИмяДрайвера + "};"
                  + "SERVER=" + Сервер + ";"
                  + "DATABASE=" + БазаДанных + ";"
                  + "UID=" + Пользователь + ";"
                  + "PWD=" + Пароль + ";";

// Обернем попытку подключения в блок Попытка-Исключение для отлова ошибок
Попытка
    // Создаем COM-объект для работы с ADO
    Connection = Новый COMОбъект("ADODB.Connection");
    
    // Открываем соединение, передавая нашу строку
    Connection.Open(СтрокаПодключения);
    
    Сообщить("Соединение с MySQL успешно установлено!");

    // Здесь можно выполнять запросы к базе данных MySQL
    // Например, получить данные из таблицы 'users'
    // RecordSet = Connection.Execute("SELECT * FROM users");
    // ... дальнейшая обработка данных ...

    // Важно не забыть закрыть соединение после завершения работы
    Connection.Close();
    
Исключение
    Сообщить("Не удалось подключиться к MySQL! Проверьте параметры и драйвер.");
    Сообщить(ОписаниеОшибки());
КонецПопытки;

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

Решение проблем с кириллицей

При получении данных из MySQL, содержащих русские буквы, вы можете столкнуться с неверной кодировкой (отображаются "кракозябры"). Чтобы это исправить, MySQL должен возвращать данные в кодировке, понятной для 1С (cp1251). Это можно указать прямо в строке подключения, добавив параметр STMT.

Модифицированная строка подключения будет выглядеть так:

СтрокаПодключения = СтрокаПодключения + "STMT=set character_set_results=cp1251;";

Этот параметр указывает серверу MySQL, в какой кодировке следует отдавать результаты запросов.

Дополнительные возможные проблемы

  1. Брандмауэр (Firewall): Убедитесь, что брандмауэр Windows или ваш антивирус не блокирует подключения по стандартному порту MySQL — 3306. Возможно, потребуется создать разрешающее правило.
  2. Права пользователя MySQL: Пользователь, которого вы используете для подключения, должен иметь права на доступ к нужной базе данных с того компьютера, откуда идет запрос. В настройках MySQL можно ограничить доступ для пользователя только с localhost. Если 1С находится на другом компьютере, нужно выдать права на подключение с его IP-адреса.
  3. Зависимости драйвера: Иногда для установки ODBC-драйвера требуются дополнительные системные компоненты, например, пакеты Microsoft Visual C++ Redistributable. Если драйвер не устанавливается, проверьте требования к нему.

Альтернатива: Внешние источники данных 1С

Стоит упомянуть, что в современных версиях платформы "1С:Предприятие" (начиная с 8.2) есть встроенный механизм — Внешние источники данных. Он также работает через ODBC-драйвер, но позволяет интегрировать таблицы MySQL прямо в дерево конфигурации 1С. Это дает возможность обращаться к внешним таблицам через стандартные объекты 1С, например, Запрос, что гораздо удобнее и "нативнее", чем работа с ADODB.RecordSet. Если вам предстоит плотная и постоянная работа с данными из MySQL, рекомендуем изучить этот механизм.

← На главную