Вход | Регистрация
 
1С:Предприятие :: 1С:Предприятие 8 общая

ADODB несколько запросов в 1 строке

ADODB несколько запросов в 1 строке
Я
   Roma1314704
 
28.11.20 - 00:50
Есть вопрос. Работают с базой mysql через ADOBD. Все работает ок с 1 запросом.
Сейчас пытаюсь в 1 строке прописать 2 запроса, но ничего не выходит - синтаксическая ошибка
Задача следующая - нужно что бы в Mysql в 2 разные таблицы записывались значения цены - розничная в 1 таблицу, а со скидкой в другую.
Вообще возможно в 1 запросе это сделать или нет?

вот кусок кода

Command.CommandText = "INSERT INTO"+" "+ТаблицаАкции+" " + "(product_id,customer_group_id, price)" + " VALUES "+"("+Строка.Код+","+"1,"+Формат(Строка.ЦенаСкидка,"ЧЦ=10; ЧГ=0;")+")"+";UPDATE"+" "+ ТаблицаSql+ " " + "SET quantity='"+Строка.Остаток+"'" +" ," +"price='"+(Формат(Строка.Цена,"ЧЦ=10; ЧГ=0;"))+"'" + " WHERE model = '" + Строка.КодТовара +  "'"+";";
   ДенисЧ
 
1 - 28.11.20 - 05:29
   spectre1978
 
2 - 28.11.20 - 07:33
Вообще объекты ADO Command спооектированы так, чтобы выполнять одну конкретную команду. Об этом и в MSDN написано, и видно по самому конструктиву. Некоторые свойства в случае нескольких команд будут работать непонятно как, например число измененных (affected) записей, скорее всего они будут отражать результат работы последней команды из пакета. Но в теории возможно, если драйвер СУБД это позволяет.
   acht
 
3 - 28.11.20 - 10:18
(2) > спооектированы так, чтобы выполнять одну конкретную команду. Об этом и в MSDN

Чойта?
https://docs.microsoft.com/en-us/sql/ado/reference/ado-api/nextrecordset-method-ado?view=sql-server-ver15

    If you open a Recordset object based on a compound command statement
    (for example, "SELECT * FROM table1;SELECT * FROM table2") using the
    Execute method on a Command or the Open method on a Recordset, ADO
    executes only the first command and returns the results to recordset.
    To access the results of subsequent commands in the statement, call
    the NextRecordset method.

    ...
    Your OLE DB provider determines when each command in a compound statement
    is executed. The Microsoft OLE DB Provider for SQL Server, for example,
    executes all commands in a batch upon receiving the compound statement.
    The resulting Recordsets are simply returned when you call NextRecordset.

Так что все на усмотрение провайдера.
   Конструктор1С
 
4 - 28.11.20 - 10:26
(0) никогда не пиши такой страшный код

(2) ADO нормально выполняет множество команд за раз. Про MySQL не скажу, но с Oracle и MS SQL Server много раз так делал
   ДенисЧ
 
5 - 28.11.20 - 10:29
Провайдер мыскля такое не понимает. МССКЛ - вполне понимает.
На сём считаю вопрос закрытым )))
   Roma1314704
 
6 - 28.11.20 - 17:20
Чем страшен такой код ?
ADO выполняет множество команд за раз. Как?
   spectre1978
 
7 - 29.11.20 - 09:02
(3) спс, не знал. Например, вот почему https://docs.microsoft.com/ru-ru/sql/ado/reference/ado-api/command-object-ado?view=sql-server-ver15: "Определяет конкретную команду, которую необходимо выполнить для источника данных.". Я полагал, что для массового обновления надо использовать Batch Updates, и в общем-то их и использовал.

Список тем форума
Рекламное место пустует  Рекламное место пустует
Независимо от того, куда вы едете — это в гору и против ветра!
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.