如题...

解决方案 »

  1.   

    数据集用的是adoqurey,
    显示想用进度条:ProgressBar,应该怎么做,你的方法和设想也可以提一下。
      

  2.   

    用 ADOQuery1 的 Options 的 eoAsyncFetch  設為 true;
    然後, 處理
    OnFetchProgress 事件
      

  3.   

    unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls, DB, ADODB, Grids, DBGrids, ExtCtrls, DBCtrls, ComCtrls;type
      TForm1 = class(TForm)
        DataSource1: TDataSource;
        DBNavigator1: TDBNavigator;
        DBGrid1: TDBGrid;
        ADOConnection1: TADOConnection;
        ADODataSet1: TADODataSet;
        Button1: TButton;
        Button2: TButton;
        ProgressBar1: TProgressBar;
        ADOQuery2: TADOQuery;
        procedure FormActivate(Sender: TObject);
        procedure Button1Click(Sender: TObject);
        procedure Button2Click(Sender: TObject);
        procedure ADODataSet1FetchProgress(DataSet: TCustomADODataSet;
          Progress, MaxProgress: Integer; var EventStatus: TEventStatus);
        procedure ADODataSet1FetchComplete(DataSet: TCustomADODataSet;
          const Error: Error; var EventStatus: TEventStatus);
      private
        { Private declarations }
      public
        { Public declarations }
      end;var
      Form1: TForm1;
      l_Star:Double;
      l_End:Double;
      
    implementation{$R *.dfm}procedure TForm1.FormActivate(Sender: TObject);
    begin
      ADOQuery2.Close;
      ADOQuery2.Open;
      ProgressBar1.Max:= ADOQuery2.Fields[0].Value;
      Self.Caption:=IntToStr(Progressbar1.Max);
    end;procedure TForm1.Button1Click(Sender: TObject);
    begin
      try
        ADODataSet1.Active:=false;
        ADODataSet1.ExecuteOptions:=[eoAsyncFetchNonBlocking];
      finally
        l_Star:=GetTickCount;
        ADODataSet1.Active:=true;
      end;
    end;procedure TForm1.Button2Click(Sender: TObject);
    begin
      try
        ADODataSet1.Active:=false;
        ADODataSet1.ExecuteOptions:=[eoAsyncFetch ];
      finally
        l_Star:=GetTickCount;
        ADODataSet1.Active:=true;
      end;
    end;procedure TForm1.ADODataSet1FetchProgress(DataSet: TCustomADODataSet;
      Progress, MaxProgress: Integer; var EventStatus: TEventStatus);
    begin
      progressbar1.Position:=progress;
    end;procedure TForm1.ADODataSet1FetchComplete(DataSet: TCustomADODataSet;
      const Error: Error; var EventStatus: TEventStatus);
    begin
      l_End:=GetTickCount;
      //Sleep(2000);
      MessageBox(Self.Handle,PChar(FloatToStr((l_End-l_Star)/1000.0)+'秒'),'所用时间',mB_OK);end;end.部分代码,包括两种查询方式,效果不一样 button1的方法适合你
      

  4.   

    那我可以按照数据的条数一直显示进度条在增加,假如到了adoquery.eof 那么就结束,这样总可以吧,是吗?问题是我触发按钮一定要给Ttimer一个标识,这样Ttimer一直在监控是不是有点那个啊?(那个:=欺骗用户?)
      

  5.   

    超级猛料2003中的一段,大家来探讨一下:
      ADOQuery查询进度    
      我一直没有做得满意!请教大家是怎么做的 
    比如with adoquery1 dobeginclose;sql.clear;sql.add('select * from database');open;end;这个过程怎么用进度条显示 ?用ADOConnection连接数库设置adoquery1.executeoptions.eoasyncfetch := True;adoquery1.CursorLocation :=clUserClient;这样就可以在OnFetchProgress事件中取得以读入的记录条数了,用进度条显示就可以了 
     
       
      

  6.   

    用adoquery1的onfetchprogress事件
    begin
      progressbar1.position;=progress*100 div maxprogress;
    end;
      

  7.   

    有一个问题,为了可移植,我把数据集都放在了datamoduls中,在datamoduls当然不能显示进度条,那各位有好的处理方法吗?如果没有datamoduls可能welllove88(寒林)就是对的。
      

  8.   

    要动态显示,只能在提取数据的过程中显示,在Open之后写的动态显示都是骗子
      

  9.   

    是啊,所以才为难啊,要加到用adoquery1的onfetchprogress事件,可adoquery在数据模板上,调用progressbar1好象有点问题啊
      

  10.   

    大富翁中的回答:来自:Aiirii, 时间:2004-4-21 9:37:21, ID:2571359
    簡單的, 你可直接
    procedure TForm1.ADODataSet1FetchProgress(DataSet: TCustomADODataSet;
      Progress, MaxProgress: Integer; var EventStatus: TEventStatus);
    begin
      Form2.progressbar1.Position:=progress; ////////
    end;要不, 你也可做成一個
     Sendmessage(Form2.Handle, MyMessage, progress, 0);
    這樣, 發個消息, 讓 Form2 接到, 處理  
    这样的好象有点问题啊
      

  11.   

    to Aiirii,你的方法好象有点问题,因为方法1,数据模板中不能简单地调用其他可见的控件或窗口,方法2,你只发送了一个消息,而查询始终在不断的进行。
      

  12.   

    用 ADOQuery1 的 Options 的 eoAsyncFetch  設為 true;
    然後, 處理
    OnFetchProgress 事件
      

  13.   

    用 ADOQuery1 的 Options 的 eoAsyncFetch  設為 true;
    然後, 處理
    OnFetchProgress 事件
    另,查询最好在线程中作,如果不行,至少也要Fetch一条或n条记录ProcessMesssage一次