|
Обход результата запроса, через "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
|
||||
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 |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |