Имя: Пароль:
1C
 
Обход результата запроса, через "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