Обход результата запроса, через "ADODB.Connection" долго работает #810184


#0 by TDI
Коллеги, может кто сталкивался. Выполняется запрос к SQL базе через ADODB.Connection Само выполнение запроса происходит достаточно быстро. Но вот его обход - очень долго     Пока RecordSet.EOF = 0 Цикл ........ И в основном всё время теряется на команде "RecordSet.MoveNext" Может кто знает, из-за чего такие большие задержки, и как можно ускорить процесс обхода ?
#1 by lodger
выгрузи в ТЗ.
#2 by Петрович 2018
Выгружай в COMSafeArray
#3 by TDI
а где почитать пример  работы с COMSafeArray ?
#4 by Сияющий в темноте
Просто, при каждом перемещении серверу отправляется команда и он выдаёт порцию данных текущей строки.
#5 by TDI
да, только вот как без MoveNext получить значение результата выборки ?
#6 by Петрович 2018
- либо вот так
#7 by TDI
да, так работает .GetRows но тоже очень медленно. По времени тоже самое что и перебор через MoveNext :(
#8 by бомболюк
а чему у нас равно Соединение.CursorLocation?
#9 by TDI
RecordSet.CursorLocation = 2
#10 by TDI
Соединение.CursorLocation = 2
#11 by бомболюк
серверный значит, ну он вроде побыстрее, но поиграй им, сделай 3 (клиентский), вдруг лучше станет. Еще параметр Соединение.LockType поглядеть бы, его если что в 1.
#12 by Сияющий в темноте
А что у вас в запросе ? Если там какие-то BLOB-поля выбираются, то ничего удивительного, так как SQL при выполнении запроса просто читает номер BLOB, а само поле будет передавать потом, когда его запросят в результат.
#13 by lodger
хочется быстрее - откажитесь от ADODB. быстро и легко в разработке - тяжело и медленно в работе.
#14 by TDI
а какие ещё есть варианты получения? Через ВнешнийИсточник тоже медленно
#15 by НЕА123
>Само выполнение запроса происходит достаточно быстро. смотри, сколько выполняется первый MoveNext.
#16 by TDI
Форма.Форма.Форма    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
Тэги:
Ответить:
Комментарии доступны только авторизированным пользователям

В этой группе 1С