![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Графическое представление открытия запроса [D7, FireBird1.5]
vvh © (2006-05-06 15:42:00)Здравствуйте Мастера!
Как визуально показать ход получения данных с сервера, например с помощью ProgressBar.
Используютcя компоненты FibPlpus
ANB (2006-05-06 17:09:00) [21]
> сколько из них всего.
= сколько их всего.
Sergey Masloff (2006-05-06 17:08:00) [22]Да мультяшку просто показывать да и все.
ANB (2006-05-06 17:08:00) [23]
> vvh (06.05.06 16:34) [8]
Но не понимаешь граблей.
Грабля первая : компоненты доступа к ФБ не умеют фетчить записи кусочками, т.е. до конца выборки данных ты не знаешь, сколько из них приехало.
Грабля вторая : пока все не приедут - ты не узнаешь сколько из них всего.
Грабля третья - собственно передача данных обычно идет очень быстро (если ты выбираешь слишком много данных - то это плохо спроектировано приложение).
Прогресс бар может понадобиться, если ты обрабатываешь открытый набор данных в цикле и этот процесс не шустрый. Тогда все проще - RecordCount содержит число записей, но желательно перед его использованием стать сначала на конец набора, а потом вернуться на начало.
evvcom (2006-05-06 16:56:00) [24]Выбери себе интервал, например, 1 секунда, динамично? И прибавляй по 1% (5%, 10%) в прогресс-баре. Если данные пришли раньше, то прогресс сразу на 100%! Если дошел до 100%, а данных еще нет, то 2 пути: либо прогресс на 0 и сначала, либо начать считать в обратную сторону! :-)))))
vvh (2006-05-06 16:34:00) [25]
> Конечно, автор вряд-ли понимает разницу, но отобразить именно
> получение данных - как два байта переслать :)
Простите, но я отлично понимаю разницу, поэтому и обратился с вопросом,
и если не трудно, то подскажите, пожалуйста, как это сделать. Спасибо.
Nikolay M. (2006-05-06 16:11:00) [26]> Тем, кто утверждает, что невозможно
Читайте вопрос, автору не нужен процесс выполнения запроса, ему нужен процесс получения данных :)
Конечно, автор вряд-ли понимает разницу, но отобразить именно получение данных - как два байта переслать :)
-SeM- (2006-05-06 16:11:00) [27]Если только через хранимые процедуры и эвенты... Но оно того стоит?
vvh (2006-05-06 16:02:00) [28]А если перед откытием, получить количество записей в таблице:
select COUNT(id_abon) ....
Ну а потом что-то сделать.
Sergey Masloff (2006-05-06 15:56:00) [29]Это невозможно. Нет никакого способа получить это ни для одного из известных мне серверов баз данных (а знаю я их немало). Более того, сомневаюсь что это теоретически реализуемо если под это не писать специальный механизм (который значительно увеличит время выполнения)
MsGuns (2006-05-06 15:55:00) [30]С помощью прогресбара - никак. А вот если изменить вид курсора (например, вместо crDefault выставить на время выполнения запроса crHourGlass) и в статусной панельке написать чт-то вроде "Чтение (обновление) данных с сервера БД..", то юзеру можно ясно дать понять, что прога вообще-то не висит ;)
vvh (2006-05-06 15:54:00) [31]У меня обычный запрос на выборку данных, открываю его:
tAbon.Open;
И вот необходимо что бы процесс получения записей отображался в ProgressBar.
ANB (2006-05-06 15:45:00) [32]А как ты узнаешь, сколько будет выполняться запрос ? Он может и на сервере крутится сначала довольно долго, прежде чем начнет присылать данные. А если запрос выполняется быстро - то и такие прибамбасы не нужны.