|
ADODB несколько запросов в 1 строке | ☑ | ||
---|---|---|---|---|
0
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
|
||||
2
spectre1978
28.11.20
✎
07:33
|
Вообще объекты ADO Command спооектированы так, чтобы выполнять одну конкретную команду. Об этом и в MSDN написано, и видно по самому конструктиву. Некоторые свойства в случае нескольких команд будут работать непонятно как, например число измененных (affected) записей, скорее всего они будут отражать результат работы последней команды из пакета. Но в теории возможно, если драйвер СУБД это позволяет.
|
|||
3
acht
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. Так что все на усмотрение провайдера. |
|||
4
Конструктор1С
28.11.20
✎
10:26
|
(0) никогда не пиши такой страшный код
(2) ADO нормально выполняет множество команд за раз. Про MySQL не скажу, но с Oracle и MS SQL Server много раз так делал |
|||
5
ДенисЧ
28.11.20
✎
10:29
|
Провайдер мыскля такое не понимает. МССКЛ - вполне понимает.
На сём считаю вопрос закрытым ))) |
|||
6
Roma1314704
28.11.20
✎
17:20
|
Чем страшен такой код ?
ADO выполняет множество команд за раз. Как? |
|||
7
spectre1978
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, и в общем-то их и использовал.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |