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

Вниз

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

 
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;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.035 c
2-1158914654
jjj
2006-09-22 12:44
2006.10.08
Вопрос по TBitBtn


15-1158561071
Колдун
2006-09-18 10:31
2006.10.08
Фэнтези


15-1158129080
DelphiLexx
2006-09-13 10:31
2006.10.08
Delphi 2006 выдает ошибку


2-1159094363
Серый
2006-09-24 14:39
2006.10.08
Вещественные переменные


6-1147775541
Misha:Luk
2006-05-16 14:32
2006.10.08
как реализовать поиск в файлах по сети?