30 апр. 2013 г.

Обмен данными 1C 8 - MySQL 5.

Необходимо выгружать данные из 1С в БД MySQL.
Решил использовать ODBC драйвер.
Но возникла проблема: составленный в коде 1С многострочный ddl-запрос не хочет выполнятся. Возникает синтаксическая ошибка в таком месте где ее нет.



На мисте нашел следующий код:
    внНаборЗаписейИзменений = Новый COMОбъект("ADODB.RecordSet");
    внНаборЗаписейИзменений.CursorLocation = 2;
    внНаборЗаписейИзменений.LockType         = 3;
    внНаборЗаписейИзменений.Open("journ_rec", внСоединение);
    
    Для Каждого Строки Из ИзмененияТЧ Цикл
        внНаборЗаписейИзменений.AddNew();
        внНаборЗаписейИзменений.Fields("journ_uid").Value         = ИДЗаписиВЖурнале;
        Если НЕ ПустаяСтрока(Строки.ИмяТЧ) Тогда
            внНаборЗаписейИзменений.Fields("nametp").Value        = Строки.ИмяТЧ;
            внНаборЗаписейИзменений.Fields("numtp").Value         = Строки.НомерСтрокиТЧ;
        КонецЕсли;
        внНаборЗаписейИзменений.Fields("namerec").Value         = Строки.ИмяРеквизита;
        внНаборЗаписейИзменений.Fields("typerec").Value         = Строки.ТипРеквизита;                
        Если НЕ ПустаяСтрока(Строки.НовоеПредставление) Тогда
            внНаборЗаписейИзменений.Fields("newview").Value     = Строки.НовоеПредставление;
        КонецЕсли;
        Если НЕ ПустаяСтрока(Строки.НовоеЗначение) Тогда
            внНаборЗаписейИзменений.Fields("newval").Value         = Строки.НовоеЗначение;
        КонецЕсли;
        внНаборЗаписейИзменений.Update();
    КонецЦикла;
    
    внНаборЗаписейИзменений.Close(); 

В моей задаче нужно делать 3 вида запроса в цикле: UPDATE, INSERT и DELETE в разные таблицы, поэтому не подходит.

В документации к ODBC драйверу нашел опцию: FLAG_MULTI_STATEMENTS (Enables support for batched statements. Added in 3.51.18.). Думаю это то что мне нужно, осталось только найти пример как эту опцию прописать в строке инициализации соединения.

Да, так и есть. Добавление "Option=67108864;" в строку соединения решает проблему!

Комментариев нет:

Отправить комментарий