20 апреля, 2024

Использование драйвера MySQL ODBC

Для обращения из 1С к базе данных сайта, использующего MySQL, необходимо на компьютере установить драйвер ODBC, 32-разрядную версию. Здесь приведены примеры кода для версии драйвера 5.1 (ссылка на драйвер).

Для инициализации объекта драйвера используется строка, в которой указаны параметры подключения — адрес сервера, имя и пароль для авторизации, имя базы данных и прочее. При работе из 1С 7.7 важный параметр этой строки CharSet — кодировка текста, с которой работает база данных сайта, если параметр не указан, весь текст будет передаваться в кодировке Windows-1251. Ниже пример функции для инициализации драйвера (здесь и далее код для 1С 7.7):

function initODBCDriver() 
try

    ODBCDriver = createObject("ADODB.Connection");
    ConnectionString = 
        "Driver={MySQL ODBC 5.1 Driver};Server="+trimAll(Server)+
        ";Database="+trimAll(DBName)+
        ";User="+trimAll(DBUser)+
        ";Password="+trimAll(Password)+
        ";Option=3;CharSet=utf8;";

    ODBCDriver.Open(ConnectionString); 

except
    message("ODBC: "+getErrorDescription(),"!");   
    return 0;
endTry;

return 1;
endFunction

Чтение из базы данных производится с помощью SELECT-запроса через объект Recordset, набор записей. У объекта Recordset доступны методы для перебора записей, например: EOF признак того что курсор в конце набора, MoveFirst перейти на первую запись, MoveNext перейти к следующей записи и так далее. Ниже пример выборки данных из таблицы oc_product:

Recordset = createObject("ADODB.Recordset");
Recordset.CursorType = 3;
Recordset.ActiveConnection = ODBCDriver;
Recordset.Open("SELECT product_id,model FROM oc_product"); 

Recordset.MoveFirst();
While Recordset.EOF() = 0 Do   
			
	product_id = Recordset.Fields("product_id").Value;
	model = Recordset.Fields("model").Value;
        
        //какие-то действия
	 
	Recordset.MoveNext(); 
EndDo;

Запись данных и любые другие манипуляции с таблицами с помощью запросов, можно сделать через объект Command. Пример вставки значений в таблицу oc_category:

Code = 2; ParentCode = 1;
Stream = createObject("ADODB.command");
Stream.ActiveConnection = ODBCDriver;
Stream.CommandText = "INSERT INTO oc_category (category_id,parent_id) VALUES ("+Code+","+ParentCode+")";
Stream.Execute();

Пример удаления всех записей из таблицы oc_category:

Stream.CommandText = "DELETE FROM oc_category";
Stream.Execute();

Для завершения работы с базой и отключения от сервера нужно использовать метод Close:

ODBCDriver.Close();