QUERY不行你改用ADOQUERY就可以,ADOQUERY中有一个事件,其中有查询的时间进程。

解决方案 »

  1.   

    adoquery.fetchprogress ,装载进度。
      

  2.   

    在adoquery中要设置executeoptions中的[eoExecuteNoRecords]为true;
      

  3.   

    呵呵,给你我的代码.
    //转换成绩
    procedure TForm1.btnzhuanhuanClick(Sender: TObject);
    var
      sql:string;
      newchj:integer;
      i:integer;//i表示progressbar的位置
    begin
      i:=0;
      btnZhuanhuan.Enabled:=False;
     try
      qryYuanshi.Open;
      qryYuanshi.First;
    //以下五行是关键步骤
      with ProgressBar1 do 
      begin
        min:=0;
        max:=qryYuanshi.RecordCount;
      end;
      qryYuanshi.DisableControls;//防止DBGrid闪烁
      while not qryYuanshi.Eof do
      begin
     //   showmessage(qryYuanshi.FieldByName('xh').value);
        sql:='insert into xkscj values ('''+qryYuanshibh.value+''','''+
           qryYuanshixh.value+''','''+qryYuanshixn.value+
           ''','''+qryYuanshixq.value+''','''+qryYuanshikch.value+
           ''','+inttostr(newchj)+')';
        qryZhuanhuan.SQL.Clear;
        qryZhuanhuan.SQL.Add(sql);
        qryZhuanhuan.ExecSQL;
    {以下两行是关键步骤}
        i:=i+1;  
        ProgressBar1.Position:=i;
        if i=qryYuanshi.RecordCount then showmessage('数据转换完毕');
        Application.ProcessMessages;//防止时间太长,影响系统其他响应.
        qryYuanshi.Next;
      end;
     finally
      btnZhuanhuan.Enabled:=True;
      qryZhuanhuan.Close;
      qryZhuanhuan.EnableControls;
      ProgressBar1.Position:=0;//这句视情况定了.
      tZhuanhuan.Open;
      tZhuanhuan.Refresh;
     end;
    end;
    注:上面程序段中t指TTable.qry指TQuery,btn指TButton.