我在Delphi中执行存储过程(Adostoreprocedure)时,发现客户端显示出当前界面死机的状态。由于存储过程很长,费时也很长(二三分鐘)。我想在存储过程执行中,在前台同时运行进度条,显示当前并没有死机而是正在运行,不知如何处理?
有人說照以下那樣,可是不行。哪位有好的解決辦法?先謝過了procedure TForm1.ADODataSet1Fetchprogress(DataSet: TCustomADODataSet;Progress,MaxProgress: Integer;var EventStatus: TEventStatus);
begin
ProgressBar1.Position := Progress;
end;procedure TForm1.ADODataSet1FetchComplete(DataSet: TCustomADODataSet;const Error; var EventStatus: TEventStauts);
begin
ShowMessage('資料已經處理完了');
end;
有人說照以下那樣,可是不行。哪位有好的解決辦法?先謝過了procedure TForm1.ADODataSet1Fetchprogress(DataSet: TCustomADODataSet;Progress,MaxProgress: Integer;var EventStatus: TEventStatus);
begin
ProgressBar1.Position := Progress;
end;procedure TForm1.ADODataSet1FetchComplete(DataSet: TCustomADODataSet;const Error; var EventStatus: TEventStauts);
begin
ShowMessage('資料已經處理完了');
end;
我的变通的方法是:
MessageShow('正在处理...');
Adoquery1.sql.text:='Exec store1';
adoquery1.execsql;
MessageHide;其中MessageShow是自己做的一个专门用来显示操作提示的窗体。
用adoquery 查詢還可以!
弄个假的,先估计好时间,然后用Timer控制ProgressBar1进度,Adostoreprocedure处理完后,ProgressBar1.Position:= ProgressBar1.Max; ^^^估计很多软件都是这样的!
没有很好的解决方法!呵呵
弄个假的,先估计好时间,然后用Timer控制ProgressBar1进度,Adostoreprocedure处理完后,ProgressBar1.Position:= ProgressBar1.Max; ^^^估计很多软件都是这样的!問題是在存儲過程執行時,Timer好象沒有效果一樣。
問題是在存儲過程執行時,Timer好象沒有效果一樣。
..................
那你就用多线程吧.一个线程来执行Query,一个线程来显示进度条.这样你的TIMER就有效了