如果打开一个具有很多条数据记录的Adoquery,将其返回记录在DBGrid显示。
怎样才能用进度条控件,控制显示进度?谢谢!

解决方案 »

  1.   

    在DBGrid.OnDrawDataCell事件时控制进度条不过查询的时间开销不是在DBGrid的绘制上,
    而是在查询语句的执行和数据的封装、传递上,
    在DBGrid上想办法作用不大
      

  2.   

    使用ADO异步执行能力,具体可以看一下Delphi5.X_ADO.MTS.COM第三章.
      

  3.   

    同意sdzeng(大头鸟) ,重点是提高查询速度
      

  4.   

    那么怎样才能在Adoquery上控制进度了,在DBGrid.OnDrawDataCell事件时控制进度条我试验过===不成功!
      

  5.   

    使用如下三个函数:
    procedure TForm1.ProcessWorkBegin(AWorkCountMax: Integer);
    begin
      ProgressBar1.Position := 0;
      ProgressBar1.Max := AWorkcountMax;
    end;procedure TForm1.ProcessWorkEnd();
    begin
      ProgressBar1.Position := 0;
    end;procedure TForm1.ProcessWork(AWorkCount: Integer);
    begin
      if ProgressBar1.Max > 0 then
      begin
        ProgressBar1.Position := AWorkCount;
      end;
    end;具体实现:
    1 Query控件使用ADOQuery,其属性ExecuteOptions下的eoAsynFetch属性设置为true;
    2 在Query控件的AfterOpen事件中添加如下代码:ProcessWorkBegin(qry.RecordCount);
    3 在Query控件的FetchProgress事件中添加如下代码:ProcessWork(Progress);