Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.10.09;
Скачать: CL | DM;

Вниз

Прогрес для TQuery   Найти похожие ветки 

 
ki11er   (2003-09-17 18:37) [0]

Можно ли как-то получать прогрес выполнения запроса (TQuery)?
Нужно для отрисовки на форме прогресса выполниния длинных запросов.

Спасибо.


 
Hawk2 ©   (2003-09-17 18:41) [1]

Помнится наверное с полгода назад задавали такой вопрос, но конкретного ответа никто не дал. Советовали запускать прогрес в отдельном процессе и т.д.


 
Reindeer Moss Eater ©   (2003-09-17 18:45) [2]

Для реализации этого требуется:
1. Знание времени, которое необходимо для выполнения запроса.
2. Механизм callback вызовов в библиотеке доступа.

Если второе реально есть в некоторых системах, то про первое зачастую сам сервер ничего не знает.
Отсюда вывод - возможны лишь имитации на тему изображения прогресса выполнения запроса.


 
Hawk2 ©   (2003-09-17 18:52) [3]

>1. Знание времени, которое необходимо для выполнения запроса.
Ну на разных машинах может быть разное время.

Если выполняется несколько запросов подряд то можно вставить прогресс между ними.


 
Reindeer Moss Eater ©   (2003-09-17 18:55) [4]

>1. Знание времени, которое необходимо для выполнения запроса.
Ну на разных машинах может быть разное время.


Оно может быть разное и на одной и той же машине. И что?

Если выполняется несколько запросов подряд то можно вставить прогресс между ними.

Ну и польза от такого прогресса? Если имеем 10 запросов и 9 из них выполняются за 1 минуту а десятый за час?


 
Hawk2 ©   (2003-09-17 19:06) [5]

..............
Query1.ExecSQL;
ProgressBar:=10;
..............
Query2.ExecSQL;
ProgressBar:=20;
..............
Query3.ExecSQL;
ProgressBar:=30;
..............
..............
QueryN.ExecSQL;
ProgressBar:=100;

Ну а если в цыкле то с наращиванием ProgressBar:=ProgressBar+10;
Все будет реально показывать. Если запрос затормаживает, то и прогресс останавливается.


 
Reindeer Moss Eater ©   (2003-09-17 19:08) [6]

Будет реально показывать что?


 
Hawk2 ©   (2003-09-17 19:13) [7]

>Будет реально показывать что?
Виполнение N количества запросов.

Я же написал, что это подходит когда исполняются несколько запросов подряд, а если один то наверное можно только иммитировать, как например в некоторых инсталяциях.


 
ki11er   (2003-09-17 19:21) [8]

>Если второе реально есть в некоторых системах
Меня интересует конкретно BDE+Paradox. BDE теоретически знает, какую часть фйла с таблицей (пусть для простоты запрос работает только с одной таблицей) он уже обработал и сколько осталось. Вопрос в том, можно ли как-то эту информацию у него выцарапать или нет?


 
Reindeer Moss Eater ©   (2003-09-17 19:24) [9]

BDE теоретически знает, какую часть фйла с таблицей (пусть для простоты запрос работает только с одной таблицей) он уже обработал и сколько осталось. Вопрос в том, можно ли как-то эту информацию у него выцарапать или нет?

Про часть файла может и знает, а вот про время ничего не знает.
Ты прогрессбар чего хочешь сделать? Времени или пространства?


 
ki11er   (2003-09-17 19:30) [10]

>Ты прогрессбар чего хочешь сделать? Времени или пространства?
;-))) Процентов ;-)))


 
MsGuns ©   (2003-09-17 20:26) [11]

Когда-то прочитал вот про такой "прогресс-бар":

1. Рисуется бар на 100 делений
2. Запускается интервальный таймер (допустим на 1 сек)
3. Запускается квери

По прерыванию от таймера увеличиваем показание прогресса на 1. Если новое значение = 100, то прогресс чистится, max прогресса удваивается.
Когде кверя закругляется, то для понта прогресс -> max позицию, таймер "убивается", дается слип на сек-другую (для внешнего эффекта можно дотянуть прогресс ускоренными темпами за те же пару сек)

Внешне для средних запросов работает нормально (в смысле более-менее похоже на правду), - главную задачу - убедить узера, что комп не повис,- делает ;)


 
Zacho ©   (2003-09-17 20:48) [12]


> ki11er (17.09.03 19:21) [8]

В случае с BDE и Парадоксом, imho, вполне подойдет DbiRegisterCallBack. Подробнее см. в bde32.hlp


 
Anatoly Podgoretsky ©   (2003-09-17 21:36) [13]

MsGuns © (17.09.03 20:26) [11]
Убедить пользователя можно с помощью TAnimate


 
Виталий Панасенко   (2003-09-18 09:32) [14]

Это есть в RxLib (по крайней мере, в примере работает), но сам не понял, как они это дело делают, кроме того что используют CallBack функции BDE. Получилось только выводить сообщения, ворачиваемые этими функциями...


 
ki11er   (2003-09-18 13:49) [15]

2 Виталий Панасенко
Да, есть TDBProgress. Но я в упор не догоняю, как с ним работать. В инете никакого нормального описания не нашел, в ихнем хэлпе тоже. Пример есть, но там он (TDBProgress) используется несколько не так, как мне нужно.
Попробую сделать через DbiRegisterCallBack (большое спасибо Zacho).
Но если кто знает, как можно с использованием RxLib - подскажите плиз - нужно просто вывести прогрес выполнения запроса.


 
ki11er   (2003-09-19 13:48) [16]

С колбэком тоже что-то ничего не выходит ;-(
Кто-нибудь может кинуть реально работающий пример?

Спасибо.



Страницы: 1 вся ветка

Текущий архив: 2003.10.09;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.02 c
14-27741
iusupp
2003-09-15 21:26
2003.10.09
Никто раньше не начинал... впервые изучать Дельфи...? ;-)


1-27471
Relaxxx
2003-09-30 11:31
2003.10.09
Поиск в строке???


3-27336
Manfred
2003-09-20 19:07
2003.10.09
List index out of bounds.


1-27500
Zhouck
2003-09-26 16:19
2003.10.09
Создание фреймов по типу фрейма


3-27377
Николай
2003-09-17 12:14
2003.10.09
метод SeeK ????