Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Прогрес для 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]

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


Наверх

Титульная страница Поиск, карта сайта Написать письмо