Форум: "Базы";
Текущий архив: 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