Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2006.10.08;
Скачать: [xml.tar.bz2];

Вниз

Индикатор при выполнении запроса   Найти похожие ветки 

 
VadimSpb   (2006-08-07 18:07) [0]

Добрый день!
Выполнение сложного запроса может продолжаться до минуты и более. Как можно показать особо нетерпеливым пользователям, что все ОК? Песочные часы многие воспринимают как символ зависания компьютера. ProgressBar практически неосуществим. Пробовал включать анимацию в GIF-e, но она останавливается при выполнении запроса. Кто как решает этот вопрос?


 
Desdechado ©   (2006-08-07 18:21) [1]

> особо нетерпеливым пользователям
бить по пальцам, непонятливых бить больно :)

гифку можно анимировать в отдельной нити


 
Ega23 ©   (2006-08-07 18:31) [2]

В отдельном потоке графику включай. Или запрос выполняй.


 
VadimSpb   (2006-08-07 18:31) [3]

По всякому пробовал - стопорится и все! Может это особенность компонента, который использую для его отображения.
Юзаю TGIFImage с http://www.tolderlund.eu/delphi/


 
clickmaker ©   (2006-08-07 18:50) [4]

а чем стандартный TAnimate не подошел?
можно еще TrxGifAnimator из RxLib.


 
VadimSpb   (2006-08-07 18:53) [5]

TGIFImage просто уже был установлен.
TAnimate не пробовал.


 
isasa ©   (2006-08-07 22:28) [6]

Если TADODataSet, то
TADODataSet.ExecuteOption := eoAsyncExecute ?


 
VadimSpb   (2006-08-07 22:50) [7]


> isasa ©   (07.08.06 22:28) [6]

Ругается: "Не удается выполнить операцию асинхронного выпонения"


 
isasa ©   (2006-08-08 09:00) [8]

TADOConnection.ConnectOptions:=coAsyncConnect ?


 
VadimSpb   (2006-08-08 09:51) [9]


> isasa ©   (08.08.06 09:00) [8]

Помогает на пару секунд :-)))
Надо почитать об особенностях асинхронного выполнения.
Вообще, вариант с потоками кажется перспективным.


 
isasa ©   (2006-08-08 10:43) [10]

На работе нашел тестовый пример. Работает.

 TForm1 = class(TForm)
   ADOConnection1: TADOConnection;
   ADODataSet1: TADODataSet;
   DataSource1: TDataSource;
   DBGrid1: TDBGrid;
   ...
 end;
...
procedure TForm1.ADODataSet1FetchComplete(DataSet: TCustomADODataSet;
 const Error: Error; var EventStatus: TEventStatus);
begin
 if EventStatus=esOK then
   DBGrid1.DataSource:=DataSource1;
end;

procedure TForm1.ADODataSet1FetchProgress(DataSet: TCustomADODataSet;
 Progress, MaxProgress: Integer; var EventStatus: TEventStatus);
begin
 dxfProgressBar1.Position:=Progress div MaxProgress * 100;
 dxfProgressBar1.Update;
 StaticText1.Caption:=format("%d/%d/%d",[Progress, MaxProgress, DataSet.RecordCount]);
 StaticText1.Update;
end;


В дизайн-моде

ADOConnection1.ConnectOptions:=coAsyncConnect;

ADODataSet1.ExecuteOptions:=[eoAsyncExecute, eoAsyncFetch, eoAsyncFetchNonBlocking];

DBGrid1.DataSource:=nil;


 
isasa ©   (2006-08-08 10:49) [11]

VadimSpb   (08.08.06 09:51) [9]
Вообще, вариант с потоками кажется перспективным.

А какая разница.
Возни с событийностью(начал/закончил) та же, если не больше. Плюс при синхронном чтении откуда получить индикатор чтения набора данных(степень заполнения кеша на клиенте)?


 
isasa ©   (2006-08-08 10:53) [12]

Да, забыл. :)
DataSource1.DataSet:=ADODataSet1;
Постоянно.


 
VadimSpb   (2006-08-08 17:08) [13]


> ADODataSet1.ExecuteOptions:=[eoAsyncExecute, eoAsyncFetch,
>  eoAsyncFetchNonBlocking];

При этих опциях выдает "A connection component is required for async ExecuteOptions".


 
VadimSpb   (2006-08-08 20:56) [14]

Что означает сообщение
"Не удается выполнить операцию во время асинхронного выполнения"?


 
Anatoly Podgoretsky ©   (2006-08-08 20:59) [15]

Какая буква не понятна?


 
VadimSpb   (2006-08-08 21:02) [16]

Не понятно, почему не удается.


 
VadimSpb   (2006-08-08 21:45) [17]

На простом запросе SELECT * FROM TABLE1 вроде работает.
Чудеса начинаются на конструкции типа

> SELECT S.Data
> (SELECT ISNULL(SUM(DS.Summa),0)
> FROM  Debtors AS DS
> WHERE DS.Data <= S.Data) AS All_DEBT
> FROM
> (SELECT PaymentDate AS Data  FROM Payments) AS S

Индикатор принимает только 2 положения (86 и 100), причем в положении 86 не прорисовывается. Понятно, что эти цифры абстрактны. Суть в том, что при таком запросе в ADODataSet1FetchProgress попадаем только 2 раза.


 
Petr V. Abramov ©   (2006-08-08 23:16) [18]

на время выполнения запроса показать форму с надписью " а теперь можете откинуться на спинку кресла..." и нетерпение исчезнет :)


 
ANB ©   (2006-08-09 09:35) [19]


> VadimSpb   (08.08.06 21:45) [17]

собственно фетч обычно выполняется довольно быстро. И, кстати, есно, обработчик не будет вызываться для каждой записи, это вызвало бы еще большие тормоза.

Лучший совет у
> Petr V. Abramov ©   (08.08.06 23:16) [18]
, но я бы еще посмотрел в сторону оптимизации запроса (и подключения нужных индексов)



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

Форум: "Базы";
Текущий архив: 2006.10.08;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.48 MB
Время: 0.043 c
6-1147626877
Dstr
2006-05-14 21:14
2006.10.08
Компы в сети


2-1158733020
pr_spark
2006-09-20 10:17
2006.10.08
запуск IE с определенным сайтом


15-1158390100
Новичоккк
2006-09-16 11:01
2006.10.08
Ищу компонент для Delphi


2-1158053356
p314
2006-09-12 13:29
2006.10.08
AOwner: TComponent


1-1156769390
DelphiLexx
2006-08-28 16:49
2006.10.08
DoubleBuffered распространять, на определенный участок





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский