我要在DBGrid里面显示一个5万条记录的表,从远程的sql server 2000中获取,需要好长一段时间,form里面有一个progressbar1,一个button1的onclick事件写的是
adotable1.open; 怎样让progressbar1从点击button1到dbgrid里面显示了相关数据这段时间内线是进度?
我问的问题可能有点好笑,因为我不知道progressbar1是依赖什么工作的。

解决方案 »

  1.   

    ProgressBar1.max:=50000;
    ProgressBar1.Position:=已经打开的记录数
      

  2.   

    ProgressBar1.max:=50000;
    ProgressBar1.Position:=已经打开的记录数这一段写在什么地方?
    已经打开的记录数如何获取?
      

  3.   

    如果是ADODataSet的话,可是在FetchProgress事件里写
    procedure TForm1.ADODataSet1FetchProgress(DataSet: TCustomADODataSet;
      Progress, MaxProgress: Integer; var EventStatus: TEventStatus);
    begin
    ProgressBar1.max:=MaxProgress;
    ProgressBar1.Position:=Progress;end;
      

  4.   

    wuqiu的方法好像不好使,progressbar不工作。为什么呢?
    我是在adotable1的onfetchprogress里面写的。
      

  5.   

    使用ado异步+上面的代码就可以了。
      

  6.   

    加上Application.ProcessMessages;procedure TForm1.ADODataSet1FetchProgress(DataSet: TCustomADODataSet;
      Progress, MaxProgress: Integer; var EventStatus: TEventStatus);
    begin
    ProgressBar1.max:=MaxProgress;
    ProgressBar1.Position:=Progress;
    Application.ProcessMessages;end;
      

  7.   

    再问一下,怎么才能不用进行任何操作(比如按个按钮什么的)判定progress已经走完,并执行相应的代码?
    即让progress走完以后自动执行一段代码?
      

  8.   

    procedure TForm1.ADODataSet1FetchProgress(DataSet: TCustomADODataSet;
      Progress, MaxProgress: Integer; var EventStatus: TEventStatus);
    begin
    ProgressBar1.max:=MaxProgress;
    ProgressBar1.Position:=Progress;
    Application.ProcessMessages;
    if MaxProgress=Progress then
      DoYourEvent;
    end;