|
Параметризованные запросы ADODB и опции Execute | ☑ | ||
---|---|---|---|---|
0
Fragster
гуру
02.07.14
✎
16:41
|
Помогите победить:
Хочу сделать асинхронную вставку и параметризованный запрос. Проблема в том, что если указывать Команда.Execute(,,adExecuteNoRecords + adAsyncExecute), то оно говорит, что параметры не указаны. Видимо воспринимает второй аргумент как пустую коллекцию параметров. Вот псевдокод: Команда = Новый ComОбъект("ADODB.Command"); Команда.ActiveConnection = Соединение; Команда.CommandType = adCmdText; Команда.Prepared = Истина; Команда.CommandText = "INSERT INTO table (f1, f2) VALUES (?, ?)"; Для Сч = 1 По 100 Цикл Команда.Parameters(0).Value = Сч; Команда.Parameters(1).Value = Сч; //Команда.Execute(,,adExecuteNoRecords + adAsyncExecute); // не работает Команда.Execute(); КонецЦикла; помогите, а то синхронная вставка сильно больше времени занимает :) |
|||
1
Fragster
гуру
02.07.14
✎
17:19
|
что, все реально парятся с экранированием кавычек, вырезанием НПП и прочим геморроем при работе через ADODB?
|
|||
2
shuhard
02.07.14
✎
17:30
|
(0)[Хочу сделать асинхронную вставку]
по отношению с солнечно-лунной орбите или по отношению к эфимеридам ? |
|||
3
Fragster
гуру
02.07.14
✎
17:42
|
(2) это все фигня. вот почему если сделать так:
Команда.Execute(,NULL,мМагияСКЛ.adAsyncExecute + мМагияСКЛ.adExecuteNoRecords); то вроде бы все правильно (и в коллекции параметров тоже), но вместо первого параметра (по совместительству первичному ключу) записывается NULL? |
|||
4
Fragster
гуру
02.07.14
✎
17:43
|
(3)+ проверяю в коллекции параметров уже после EXECUTE
|
|||
5
Fragster
гуру
02.07.14
✎
17:45
|
вернее так: первым параметром уходит то, передано вторым параметров в Execute, но это как-то совсем неправильно :(
|
|||
6
Jaap Vduul
02.07.14
✎
18:01
|
А что мешает передать значения параметров массивом?
|
|||
7
МихаилМ
02.07.14
✎
18:02
|
почему не испльзуете AddNew ?
в транзакции |
|||
8
Jaap Vduul
02.07.14
✎
18:03
|
Или вместо необязательных параметров Неопределено попробовать передавать?
|
|||
9
Fragster
гуру
02.07.14
✎
18:04
|
(7) запрос немного сложнее :)
|
|||
10
Fram
02.07.14
✎
18:05
|
(0) bulk insert?
|
|||
11
Fragster
гуру
02.07.14
✎
18:15
|
(10) не угадал
|
|||
12
MrStomak
02.07.14
✎
18:42
|
Параметры = Новый Массив;
Параметры.Добавить(Команда.Parameters(0).Value); Параметры.Добавить(Команда.Parameters(1).Value); Команда.Execute(,Параметры,adExecuteNoRecords + adAsyncExecute); Так не сработает? |
|||
13
Fragster
гуру
02.07.14
✎
18:47
|
(12) не работает
|
|||
14
Fram
02.07.14
✎
18:48
|
(13) а так
Команда.Execute(,Команда.Parameters,adExecuteNoRecords + adAsyncExecute); ? |
|||
15
Fragster
гуру
02.07.14
✎
18:56
|
(14) пихает NULL...
прокатило с ComSafeArray |
|||
16
Fragster
гуру
02.07.14
✎
18:57
|
КомМассив = Новый COMSafeArray("VT_VARIANT", 2);
Для Сч = 1 по 100 Цикл КомМассив.SetValue(0,Сч); КомМассив.SetValue(1,Сч); Команда.Execute(, КомМассив, adAsyncExecute + adExecuteNoRecords); КонецЦикла; |
|||
17
Fragster
гуру
02.07.14
✎
19:00
|
(16) + заляпуха на ожидание, на случай, если то, что там еще в цикле делается таки быстрее скулевого запроса:
Пока Команда.state = adStateExecuting Цикл // вообще тут надо по бинарной маске проверять, да Состояние("" + СчСтрок + " / " + КолСтрок + " ожидание заверщения асинхронной операции"); КонецЦикла; |
|||
18
Fram
02.07.14
✎
19:12
|
(17) а значения adAsyncExecute и тп просто числовые переменные?
|
|||
19
Fragster
гуру
02.07.14
✎
19:15
|
||||
20
МихаилМ
02.07.14
✎
22:33
|
я бы загрузил данные в ВТ
и обработал их скриптом либо хранимой процедурой. мыслите множествами а не строками. |
|||
21
Fragster
гуру
11.07.14
✎
17:06
|
кстати, вопрос: как получить реальный текст запроса? в СКД - знаю, в php + PDO - тоже. тут в мануалах что-то найти не могу...
|
|||
22
МихаилМ
11.07.14
✎
18:29
|
из тех журнала.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |