我在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;

解决方案 »

  1.   

    好象不是很好处理,
    我的变通的方法是:
    MessageShow('正在处理...');
    Adoquery1.sql.text:='Exec store1';
    adoquery1.execsql;
    MessageHide;其中MessageShow是自己做的一个专门用来显示操作提示的窗体。
      

  2.   

    以前問過几天高手, 都說不行,
    用adoquery 查詢還可以!
      

  3.   

    ExecuteOptions 里的eoAsyncFetch  要设为真
      

  4.   

    没有很好的解决方法!呵呵
    弄个假的,先估计好时间,然后用Timer控制ProgressBar1进度,Adostoreprocedure处理完后,ProgressBar1.Position:= ProgressBar1.Max;  ^^^估计很多软件都是这样的!
      

  5.   

    回复人: insert2003(高级打字员) ( ) 信誉:110  2004-09-09 09:36:00  得分: 0  
     
       没有很好的解决方法!呵呵
    弄个假的,先估计好时间,然后用Timer控制ProgressBar1进度,Adostoreprocedure处理完后,ProgressBar1.Position:= ProgressBar1.Max;  ^^^估计很多软件都是这样的!問題是在存儲過程執行時,Timer好象沒有效果一樣。
      
     
      

  6.   

    ExecuteOptions 里的eoAsyncFetch  要设为真設了也是不行!
      

  7.   


    問題是在存儲過程執行時,Timer好象沒有效果一樣。
      
     ..................
    那你就用多线程吧.一个线程来执行Query,一个线程来显示进度条.这样你的TIMER就有效了
      

  8.   

    好像没有好的办好,弄个假相吧,开始时显示一个panel,存储过程结束后,panel消失,能满足你的要求。