但我掉用一个运算很大的存储过程时,在前台等待时间可能要30秒,这样的话看起来好像是程序死了一样。我怎么用进度条控件作一个进度,
我试了一下,在执行存储过程时。好像程序是停在那里,所以进度条也是不动的。

解决方案 »

  1.   

    用Animate控件,在DELPHI的控件WIN32页面,代码可以这样写:{前题是要选好Animate的commonavi属性显示什么动画}
    with ADOStorProc do
      begin
        Parameters.ParamByName('@P1).value := '001';
        Animate1.Active:=true;
         ExecProc;
        Animate1.Active:=false;
      end;
      

  2.   

    如果存储过程不返回记录的:
    Executeoptions-->eoAsyncExecute设为TRUE; {异步执行}
    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
        ProgressBar1.Position := 0;
        ShowMessage('资料处理完毕');
      
    end;
      

  3.   

    eoAsyncExecute 异步执行
    eoAsyncFetch  异步提取
    eoAsyncFetchNonBlocking 无阻塞方式异步提取
    eoExecuteNoRecords 无返回记录执行
      

  4.   

    用Gauge,如果循环存储的话,将循环的次数据赋给Gauge的MaxValue,然后循环一次Gauge的Progress加一。