![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Прогресс выборки TADOQuery нерегулярный [D7, Access]
Tack © (2008-01-30 11:45:00)Делаю выборку всех записей из таблицы MS Access. Использую TADOQuery (Ms Jet) с флагом ExecuteOptions = eoAsyncFetchNonBlocking
Для отображения асинхронного прогресса выборки у TADOQuery есть событие OnFetchProgress, которому передаются Progress, MaxProgress (Integer), кол-во записей соответственно прочитанных и оставшихся.
Попытка отображения прогресса на градуснике по этим параметрам приводит к тому, что прогресс очень быстро доходит до 99% и ждет завершения выборки, не особо двигаясь вперед, т.к. по ходу выборки Progress и MaxProgress уравниваются.
Что сделать, чтобы выборка отображалась на индикаторе более регулярно?
Tack (2008-01-30 13:01:00) [1]ну что ж, тогда сделаю просто какую-нибудь крутилку "занятости системы", типа песочных часов.
Всем спасибо.
ANB (2008-01-30 12:46:00) [2]
> Tack (30.01.08 11:45)
Прогресс отбора имеет смысл только для отображения процесса фетча большого количества записей как результата очень простого запроса.
Типа селект * фром Табле1.
Однако такие запросы не есть хорошо, а иногда могут просто завалить сервер.
В других же случаях, как правило, большая часть времени уходит на обработку запроса, а не на передачу строк на клиента. И в этих случаях прогресс бессмысленен.
DiamondShark (2008-01-30 12:17:00) [3]Редко какой провайдер сообщает точное значение счётчика строк для результирующего набора.
Остаётся только смириться.
sniknik (2008-01-30 12:10:00) [4]хотя нет, сорри, с eoAsyncFetchNonBlocking тоже работает, дело в другом.
а вот то, что MaxProgress содержит общее количество это не верно, в нем количество обработанных на данный момент, в Progress количество переданных на клиента...
т.что чтобы узнать общее надо предварительно запрос на количество делать, и молиться чтобы оно не изменилось в процессе. ;о)
sniknik (2008-01-30 11:57:00) [5]поменять флаг... eoAsyncFetchNonBlocking на чтото другое... не помню, но точно не на неблокирующий (скорее на просто асинхронный).
и еще чтото, по мелочи, надо посмотреть. но главное надо "убить" TADOQuery и заменить его TADODataSet-ом.