Имя: Пароль:
1C
1С v8
1С and Mysql
0 gospodenkods
 
14.12.20
11:38
Граждане знатоки  прош помощи  ибо я  походу  тупенький.
Вообщем   чего делаю
Цепляюсь к базе Mysql
        Пароль = Настройка.Пароль;
    ODBC = СокрЛП(ИмяODBC);
    DB     = СокрЛП(ИмяБазы);
    User = СокрЛП(ИмяПользователя);
    Pass = СокрЛП(Пароль);
    Порт = "3306";
    СтрокаПодключения = "DRIVER={MySQL ODBC 5.1 Driver};SERVER="+СокрЛП(ODBC)+";PORT="+Порт+";DATABASE="+СокрЛП(DB)+";uid="+СокрЛП(User)+";pwd="+СокрЛП(Pass)+";";
    
    Соединение = Новый COMОбъект("ADODB.Connection");
        
        Попытка
        Соединение.open(СтрокаПодключения);
    Исключение
        Возврат Неопределено;
    КонецПопытки;

Все хорошо , все соединяет на выходе получаю Com Объект.

Скармливаю ему вот этот запрос !

ТекстЗапроса = "UPDATE modx_ms2_products SET price=( CASE  WHEN (id=2074) THEN '1688' WHEN (id=13225) THEN '45' WHEN (id=504) THEN '531' WHEN (id=1770) THEN '249' WHEN (id=545) THEN '198' WHEN (id=17582) THEN '95' WHEN (id=1174) THEN '329' WHEN (id=2051) THEN '8080' WHEN (id=1509) THEN '302' WHEN (id=643) THEN '748' END)  WHERE id IN (2074,13225,504,1770,545,17582,1174,2051,1509,643)"

Говорю  1С-ке

Соединение .Execute(ТекстЗапроса);

Как  итог получаю  висящую 1С-ку ..  Без  признаков жизни .

Хотя  в любой IDE аля HeidiSQL все проходит на  ура , ну врочем как и из консоли Nix тоже  проблем нет ..

Что я делаю не так и куда мне   капнуть ???
1 Волшебник
 
14.12.20
11:41
Сделай несколько запросов типа:
UPDATE modx_ms2_products SET price=1688 WHERE id=2074
2 бомболюк
 
14.12.20
11:41
Поменял бы ты драйвер на поновее и юникодовский для начала.
3 gospodenkods
 
14.12.20
11:45
(1) Вот это как  раз на  Ура  продетает , вообще  без проблем .  Но  гонять кучу запросов  циклом ... ну так  себе   затею . Хочу  все собрать одним запросом .
4 mikecool
 
14.12.20
11:45
подключить базу mysql как внешний источник данных не предлагать?
5 Волшебник
 
14.12.20
11:46
(3) В данном случае запрос на обновление и будет правильнее выполнить запрос в цикле.
6 gospodenkods
 
14.12.20
11:47
(4) Не , там своя  специфика  .. Переписать кучку   кода придется  .. Недельки так на 3-4 :)
7 gospodenkods
 
14.12.20
11:48
(5) Да я  боюсь  не будет ли  Mysql  подтупливать  при  гонке запросов в цикле .. Ну скажем мне если записей  тысяч 30 обновить ?
8 Волшебник
 
14.12.20
11:48
(7) Всё будет быстро
9 Волшебник
 
14.12.20
11:49
если надо ещё быстрее, есть LOAD DATA
10 Волшебник
 
14.12.20
11:51
или можно сделать файл с пачкой SQL-запросов и скормить его утилите mysql
11 gospodenkods
 
14.12.20
11:56
(2) Попробую  сейчас  сделать это  . (10)  Словам Волшебника надо доверять :) Попробую , погляжу  как  все выйдет .
Отпишусь :)
12 gospodenkods
 
14.12.20
12:20
Господа ..Дичайше извиняюсь...  
Походу  дело было не в бабине ..

Вообщем поставил  Конектор 8 версии .. Виснет ..
Откатил на 5.1  и как  советовал Волшебник , решил пустить  циклом .. Но и в цикле  тоже виснет !!
Блин , психанул , перезагрузил комп ..

Пнул  в цикле НЕ виснет ! Пнул одним запросом НЕ виснет..

Вообщем ,вылечилось все  перезагрузкой.  

Все равно ребят спасибо ,что не бросили в беде :)
13 Волшебник
 
14.12.20
12:25
>> психанул — перезагрузил комп ..

В любой непонятной ситуации первым делом надо перезагружаться и чистить кэш.
14 fisher
 
14.12.20
12:48
Нагуглил, что ежели в строке соединения с MySQL указать MULTI_STATEMENTS=1, то можно выполнять пакетные запросы (с пятой версии начиная, кажись).
Т.е. можно сгенерить пакетный запрос с кучей UPDATE через точку с запятой и послать его на выполнение.
15 gospodenkods
 
14.12.20
19:32
(14) Надо будет в целях  саморазвития  поглядеть че за зверь :)  Спасибо.
Основная теорема систематики: Новые системы плодят новые проблемы.