开始,我将dataoutform.ProgressBar1.StepBy(20);
         dataoutform.ProgressBar1.Refresh;放在结果集的循环中
当结果集中只有7、8条数据的时候,可以看到进度条中有显示
可当数据达到10000条时,再导出数据,进度条一点变化也没有后来搜索了以前的贴子,有人说以下方法可以。
 adoquery1的executeoptions中的eoasyncfetch或eoasyncfetchnonblocking应该设置为true。
 procedure TForm1.ADOQuery1FetchProgress(DataSet: TCustomADODataSet;
   Progress, MaxProgress: Integer; var EventStatus: TEventStatus);
 begin
  form1.ProgressBar1.Position:=progress*100 div maxprogress;
  Application.ProcessMessages;
end;
我试了以上方法,运行时报错'connection必须要异步'
我用的是access数据库,是不是这种数据库不支持异步
那该怎么做呢??急用,谢谢

解决方案 »

  1.   

    procedure TForm1.BitBtn1Click(Sender: TObject);
    var
      i:integer;
    begin
      ProgressBar1.Position:=0;
      ProgressBar1.Max:=10000;// ADOQuery1.RecordCount;
      for i:=0 to 10000 do
      begin
         ProgressBar1.Position:=ProgressBar1.Position+1;
      end;
    end;
      

  2.   

    dataoutform.ProgressBar1.StepBy(20);
    dataoutform.ProgressBar1.Refresh;
    self.update;
      

  3.   

    procedure TForm1.Button1Click(Sender: TObject);
     var F: TextFile;
    begin
     adoquery.Open;
     AssignFile(F, 'f:\NEWFILE.txt');
      Rewrite(F);
     pp.Max:=adoquery.RecordCount;
     pp.step:=1;
     while not adoquery.Eof do
     begin
       Writeln(F, 你的数据据);
       pp.StepIt;
       qq.Next;
      end;
      CloseFile(F);end;
      

  4.   

    把ADOConnection1.ConnectOption:=coAsyncConnect 试试!
    如果不行,请参考《Delphi 5.X ADO_MTS_COM+高级程序设计篇》第三章,第四节(网上可下载)
      

  5.   

    to Fangyuanshan(远山) 给个下载的链接吧,我怎么找不到
    谢谢
      

  6.   

    把进度条的最大最小值设为0、10000for i:=0 to 10000 do
      begin
         ...导入第i条的语句
         if i是10的倍数  then
         begin
           Application.ProcessMessage;
           ProgressBar1.Position:=ProgressBar1.Position+10;
         end;
      end;
      

  7.   

    刚试过了 lemon_wei(明天会更好) 的方法可以
    请问StepIt和StepBy有什么区别?
      

  8.   

    对了,我是在一个弹出的窗口显示进度栏的,有个label显示信息,在进度栏滚动过程中,label无法显示信息,在进度栏滚动停止后才能显示,这是为什么?
      

  9.   

    对了,我是在一个弹出的窗口显示进度栏的,有个label显示信息,在进度栏滚动过程中,label无法显示信息,在进度栏滚动停止后才能显示,这是为什么?form1.refresh
      

  10.   

    另外,我做大数据量的数据导出导入时,在windows任务管理器看到的这个程序处于未响应状态,等处理完数据后,就又好了,而且当处理数据时,我切换到别的程序就在打不开delphi可执行程序了,直到数据处理结束
    怎么才能改变这种情况??
      

  11.   

    针对于你中间又问的问题
    两种方法
    1、label1.update;
    2、Application.ProcessMessages;
    加上其中的任何一句。