with ADOQuery1 do
    begin
      close;
      sql.Clear;
      sql.Add('select * from test');
      prepared;
      open;
    end;因为TEST表有里100万条的记录,整个查询耗时10S,为了让用户知道查询正在进行中,想用个进度条来表示查询过程.
想用如下的形式做法,但找不到ADOQUERY1的记录数.
var i:integer;
begin
  ProgressBar1.Min := 0;
  ProgressBar1.Max := 10000;
  for i:=1 to 10000 do
    begin
      ProgressBar1.Position := i;
    end; 
end;请指教.

解决方案 »

  1.   

    //用鼠标的不用形状来表示好了.
      try
      Screen.Cursor := crSQLWait;
      with ADOQuery1 do
        begin
          close;
          sql.Clear;
          sql.Add('select * from test');
          prepared;
          open;
        end;  
      Screen.Cursor := crDefault;
      except
      Screen.Cursor := crDefault;
      end;假如ADOQUERY1的数据太多,OPEN的时间太长,
    比如有一个查询要用1分钟或更长,但用户觉得此时间太长,要求如果超过10S就"中断"查询.Q:
    1,怎实现?
    2,
    已经
    ADOQuery1.CommandTimeout := 3;
    但查询超过3S时,程序没有异常;????
      

  2.   

    用zzlingaaa(小舟)的方法最简单了。
      

  3.   

    楼上:
    现在的问题是;假如ADOQUERY1的数据太多,OPEN的时间太长,
    比如有一个查询要用1分钟或更长,但用户觉得此时间太长,要求如果超过10S就"中断"查询.
      

  4.   

    >>'select * from test'
    如果不是真的需要把所有的字段全部查询出来,*可以改成相应的字段就可以节约一点时间
      

  5.   

    上面的语句只是举例说明问题.这里且不考虑SQL语句的效率.
      

  6.   

    先估算一下时间,让进度条进到大约90%的时候停止,查询完再走那10%有帮助.
    我是想如果到了10S,ADOQUERY1还没有OPEN完的话,就"中断"返回.