![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Прогрес для TQuery [D4, Paradox]
ki11er © (2003-09-17 18:37:00)
Можно ли как-то получать прогрес выполнения запроса (TQuery)?
Нужно для отрисовки на форме прогресса выполниния длинных запросов.
Спасибо.
ki11er (2003-09-19 13:48:00) [1]
С колбэком тоже что-то ничего не выходит ;-(
Кто-нибудь может кинуть реально работающий пример?
Спасибо.
ki11er (2003-09-18 13:49:00) [2]
2 Виталий Панасенко
Да, есть TDBProgress. Но я в упор не догоняю, как с ним работать. В инете никакого нормального описания не нашел, в ихнем хэлпе тоже. Пример есть, но там он (TDBProgress) используется несколько не так, как мне нужно.
Попробую сделать через DbiRegisterCallBack (большое спасибо Zacho).
Но если кто знает, как можно с использованием RxLib - подскажите плиз - нужно просто вывести прогрес выполнения запроса.
Виталий Панасенко (2003-09-18 09:32:00) [3]
Это есть в RxLib (по крайней мере, в примере работает), но сам не понял, как они это дело делают, кроме того что используют CallBack функции BDE. Получилось только выводить сообщения, ворачиваемые этими функциями...
Anatoly Podgoretsky (2003-09-17 21:36:00) [4]
MsGuns © (17.09.03 20:26) [11]
Убедить пользователя можно с помощью TAnimate
Zacho (2003-09-17 20:48:00) [5]
> ki11er (17.09.03 19:21) [8]
В случае с BDE и Парадоксом, imho, вполне подойдет DbiRegisterCallBack. Подробнее см. в bde32.hlp
MsGuns (2003-09-17 20:26:00) [6]
Когда-то прочитал вот про такой "прогресс-бар":
1. Рисуется бар на 100 делений
2. Запускается интервальный таймер (допустим на 1 сек)
3. Запускается квери
По прерыванию от таймера увеличиваем показание прогресса на 1. Если новое значение = 100, то прогресс чистится, max прогресса удваивается.
Когде кверя закругляется, то для понта прогресс -> max позицию, таймер "убивается", дается слип на сек-другую (для внешнего эффекта можно дотянуть прогресс ускоренными темпами за те же пару сек)
Внешне для средних запросов работает нормально (в смысле более-менее похоже на правду), - главную задачу - убедить узера, что комп не повис,- делает ;)
ki11er (2003-09-17 19:30:00) [7]
>Ты прогрессбар чего хочешь сделать? Времени или пространства?
;-))) Процентов ;-)))
Reindeer Moss Eater (2003-09-17 19:24:00) [8]
BDE теоретически знает, какую часть фйла с таблицей (пусть для простоты запрос работает только с одной таблицей) он уже обработал и сколько осталось. Вопрос в том, можно ли как-то эту информацию у него выцарапать или нет?
Про часть файла может и знает, а вот про время ничего не знает.
Ты прогрессбар чего хочешь сделать? Времени или пространства?
ki11er (2003-09-17 19:21:00) [9]
>Если второе реально есть в некоторых системах
Меня интересует конкретно BDE+Paradox. BDE теоретически знает, какую часть фйла с таблицей (пусть для простоты запрос работает только с одной таблицей) он уже обработал и сколько осталось. Вопрос в том, можно ли как-то эту информацию у него выцарапать или нет?
Hawk2 (2003-09-17 19:13:00) [10]
>Будет реально показывать что?
Виполнение N количества запросов.
Я же написал, что это подходит когда исполняются несколько запросов подряд, а если один то наверное можно только иммитировать, как например в некоторых инсталяциях.
Reindeer Moss Eater (2003-09-17 19:08:00) [11]
Будет реально показывать что?
Hawk2 (2003-09-17 19:06:00) [12]
..............
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 18:55:00) [13]
>1. Знание времени, которое необходимо для выполнения запроса.
Ну на разных машинах может быть разное время.
Оно может быть разное и на одной и той же машине. И что?
Если выполняется несколько запросов подряд то можно вставить прогресс между ними.
Ну и польза от такого прогресса? Если имеем 10 запросов и 9 из них выполняются за 1 минуту а десятый за час?
Hawk2 (2003-09-17 18:52:00) [14]
>1. Знание времени, которое необходимо для выполнения запроса.
Ну на разных машинах может быть разное время.
Если выполняется несколько запросов подряд то можно вставить прогресс между ними.
Reindeer Moss Eater (2003-09-17 18:45:00) [15]
Для реализации этого требуется:
1. Знание времени, которое необходимо для выполнения запроса.
2. Механизм callback вызовов в библиотеке доступа.
Если второе реально есть в некоторых системах, то про первое зачастую сам сервер ничего не знает.
Отсюда вывод - возможны лишь имитации на тему изображения прогресса выполнения запроса.
Hawk2 (2003-09-17 18:41:00) [16]
Помнится наверное с полгода назад задавали такой вопрос, но конкретного ответа никто не дал. Советовали запускать прогрес в отдельном процессе и т.д.