Сегодня мы рассмотрим вопрос о присоединении 1с к базе MySQL.
После установки драйвера в разделе «Администрирование» панели управления Вашего компьютера появится пункт «Источники данных (ODBC)». Здесь во вкладке «Пользовательский DNS» нужно добавить «MySQL ODBC Driver» и настроить его с Вашими параметрами. При удачной настройки, при нажатии на кнопку «Test» появится сообщение «Connection successful».
Далее создадим тестовое приложение в 1С. Добавим в процедуру «Сформировать» следующий код:
ВашСервер = "localhost"; //Адрес Вашего Сервера БД ВашаБаза = "base"; //Имя базы с которой работать ВашЛогин = "root"; //Имя пользователя БД ВашПароль = ""; //Пароль пользователя БД Соединение = СоздатьОбъект("ADODB.Connection"); СтрокаСоединения = "DRIVER=MySQL ODBC 5.1 Driver;" + "SERVER="+ВашСервер+";" + "DataBase="+ВашаБаза+";" + "UID="+ВашЛогин+";" + "PWD="+ВашПароль+";"; Соединение.ConnectionString = (СтрокаСоединения); Попытка Соединение.Open(); СтрокаЗапроса = "SELECT id, name FROM Users"; НаборЗаписей=Соединение.Execute(СтрокаЗапроса); Пока НаборЗаписей.Eof()=0 Цикл Сообщить(Набор.Fields(0).Value + " " + Набор.Fields(1).Value); КонецЦикла; Исключение Для ы = 1 По Соединение.Errors.Count Цикл Сообщить(Соединение.Errors.Item(ы-1).Description); КонецЦикла; Соединение.Errors.Clear(); КонецПопытки; Соединение.Close();
Данный код, при удачном выполнении, выведет на экран поля id и name из базы Users. В противном случае покажутся все ошибки.
Самая распространенная проблема при такой работе, это кодировки. Часто в 1С выводятся непонятные символы. Для обхода данной проблемы стоит явно прописывать кодировку данных из MySQL в запросе. Например, если данные поля name храняться в кодировке CP1252, то запрос стоит писать следующим образом:
«SELECT id, Convert(name using latin1) FROM Users»
Для остальныйх кодировок все аналогично, меняется лишь слово ‘latin1’.
Так же стоит отметить что не работает метод «SET NAMES». Придется явно прописывать все кодировки, если это необходимо, например:
«set character_set_client=cp1251», «set character_set_results=utf8», «set collation_connection=utf8_general_ci».