|
Обход результата запроса, через "ADODB.Connection" долго работает |
☑ |
0
TDI
13.12.17
✎
11:25
|
Коллеги, может кто сталкивался.
Выполняется запрос к SQL базе через ADODB.Connection
Само выполнение запроса происходит достаточно быстро.
RecordSet = Соединение.Execute(ТекстЗапросаADO);
Но вот его обход - очень долго
Пока RecordSet.EOF() = 0 Цикл
........
RecordSet.MoveNext();
КонецЦикла;
И в основном всё время теряется на команде "RecordSet.MoveNext()"
Может кто знает, из-за чего такие большие задержки, и как можно ускорить процесс обхода ?
|
|
1
lodger
13.12.17
✎
11:27
|
выгрузи в ТЗ.
|
|
2
Петрович 2018
13.12.17
✎
11:27
|
(0) Выгружай в COMSafeArray
|
|
3
TDI
13.12.17
✎
11:32
|
а где почитать пример работы с COMSafeArray ?
|
|
4
Сияющий в темноте
13.12.17
✎
11:35
|
Просто, при каждом перемещении серверу отправляется команда и он выдаёт порцию данных текущей строки.
|
|
5
TDI
13.12.17
✎
11:41
|
(4)да, только вот как без MoveNext получить значение результата выборки ?
|
|
6
Петрович 2018
13.12.17
✎
11:44
|
(3) - либо вот так
|
|
7
TDI
13.12.17
✎
11:53
|
(6)
да, так работает .GetRows()
но тоже очень медленно.
По времени тоже самое что и перебор через MoveNext()
:(
|
|
8
бомболюк
13.12.17
✎
11:55
|
а чему у нас равно Соединение.CursorLocation?
|
|
9
TDI
13.12.17
✎
11:58
|
(8)
RecordSet.CursorLocation = 2
|
|
10
TDI
13.12.17
✎
11:58
|
Соединение.CursorLocation = 2
|
|
11
бомболюк
13.12.17
✎
12:02
|
серверный значит, ну он вроде побыстрее, но поиграй им, сделай 3 (клиентский), вдруг лучше станет. Еще параметр Соединение.LockType поглядеть бы, его если что в 1.
|
|
12
Сияющий в темноте
13.12.17
✎
12:02
|
А что у вас в запросе ? Если там какие-то BLOB-поля выбираются, то ничего удивительного, так как SQL при выполнении запроса просто читает номер BLOB, а само поле будет передавать потом, когда его запросят в результат.
|
|
13
lodger
13.12.17
✎
12:07
|
(7) хочется быстрее - откажитесь от ADODB.
быстро и легко в разработке - тяжело и медленно в работе.
|
|
14
TDI
13.12.17
✎
12:39
|
(13) а какие ещё есть варианты получения?
Через ВнешнийИсточник тоже медленно
|
|
15
НЕА123
13.12.17
✎
12:44
|
(0)
>Само выполнение запроса происходит достаточно быстро.
смотри, сколько выполняется первый MoveNext().
|
|
16
TDI
13.12.17
✎
12:55
|
Форма.Форма.Форма 81 81 24,309178 RecordSet.MoveNext(); 81,15
Форма.Форма.Форма 46 1 5,563334 RecordSet = Соединение.Execute(ТекстЗапросаADO); 18,57
Форма.Форма.Форма 72 82 0,075360 Пока RecordSet.EOF() = 0 Цикл 0,25
|
|
Требовать и эффективности, и гибкости от одной и той же программы — все равно, что искать очаровательную и скромную жену... по-видимому, нам следует остановиться на чем-то одном из двух. Фредерик Брукс-младший