Работа с MySQL из 1С через ODBC

Источник: https://helpf.pro/faq/view/1791.html

В статье описан процесс работы с MySQL базой из 1С через ODBC.

Первое что следует обязательно учесть это версия драйвера, для того чтобы всё корректно работало вам потребуется драйвер версии 3.51 (с драйвером 5-ой версии я пробился пол дня пытаясь хоть чего нибудь добиться, безрезультатно & поменял на предыдущую версию и всё заработало!

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

Код 1C v 8.х

Соединение = "DRIVER=MySQL ODBC 3.51 Driver;Database=inventar_sm;DataSource=roman-book;UID=root;PWD=240580;STMT=set character_set_results=cp1251;"; //Это если задаём кодировку соединения (лучше задать); Соединение = "DRIVER=MySQL ODBC 3.51 Driver;Database=inventar_sm;DataSource=roman-book;UID=root;PWD=240580;";//Это без задания кодировки.

то касается кодировки то лучше её конечно задать, но на вставку записей в БД MySQL оно почемуто не влияет, и чтобы корректно всё отрабатывало и не выглядело кракозябриками после отработки скриптов, перед выполнением самих скриптов лучше выполнить вот такой вот скрипт «set names cp1251» в рамках соединения он правильно установит кодировку (так надёжнее).

Для работы с самой базой объявляем объект ADODB.Connection & это соединение с базой.

Для работы с данными можем объявить: ADODB.Recordset & для чтения данных, и ADODB.Command для изменения.

(ADODB.Command & не имеет метода ExecuteScalar, поэтому вместо него придётся обходиться Recordset-ом и с его помощью выбирать данные, хотя возможно я чегото не доглядел).

Итак пример. Выбираем данные из таблицы:

Код 1C v 8.х

Попытка Connection = Новый COMОбъект("ADODB.Connection"); Connection.Open("DRIVER=MySQL ODBC 3.51 Driver;Database=inventar_sm;DataSource=roman-book;UID=root;PWD=240580;STMT=set character_set_results=cp1251;"); RS = Новый COMОбъект("ADODB.Recordset"); RS.CursorType=3;// Запрос к базе на языке SQL запросов. RS.ActiveConnection=Connection; RS.Open("select * from market_users");//Перемещаем указатель на первую запись. RS.MoveFirst(); Пока RS.EOF()=0 Цикл // Обрабатываем значения полей выборки. NAM = RS.Fields("NAME").Value; Сообщить(NAM); // Перемещаем указатель. RS.MoveNext(); КонецЦикла; //Закрываем соединения. RS.Close(); Connection.Close();

Теперь изменяем данные:

Код 1C v 8.х

Connection = Новый COMОбъект("ADODB.Connection"); Connection.Open("DRIVER=MySQL ODBC 3.51 Driver;Database=inventar_sm;DataSource=roman-book;UID=root;PWD=240580;STMT=set character_set_results=cp1251;");//Устанавливаем кодировку для нашего подключения (дополнительно)... Command= new COMObject("ADODB.Command"); Command.CommandText = "set names cp1251"; Command.ActiveConnection = Connection; Command.CommandType = 1; Command.Execute();//Теперь выполняем скрипт Command= new COMObject("ADODB.Command"); Command.CommandText = "update market_cards set name='Хлебушек бородинский' where articul='123'"; Command.ActiveConnection = Connection; Command.CommandType = 1; Command.Execute();//Закрываем соединение. Connection.Close();