procedure TForm1.Button1Click(Sender: TObject);
begin
    Timer1.Enabled:=true;
    application.ProcessMessages;
    adoquery1.open;
    Timer1.Enabled:=false;
  end;
end;问题是:adoquery.open执行时,timer不能执行!

解决方案 »

  1.   

    “P r o g r e s s B a r”这个词为什么不能发啊?
      

  2.   

    procedure TForm1.Button1Click(Sender: TObject);
    begin
        Timer1.Enabled:=true;
        application.ProcessMessages;
        adoquery1.open;
        Timer1.Enabled:=false;
      end;
    end;问题是:adoquery.open执行时,timer不能执行!
    -----------------------------------
    你想用timer干什么???
      

  3.   

    procedure TForm1.Timer1Timer(Sender: TObject);
    begin
      if Progress_Bar1.Position>=Progress_Bar1.Max then
        Progress_Bar1.Position:=0
      else
        Progress_Bar1.StepIt;
    end;由于“P r o g r e s s B a r” 这个词不能发,所以用“Progress_Bar”代替!
    突然明白为什么这个词不能发了,中间有“s B”,这论坛真弱智!
      

  4.   

    procedure TForm1.Timer1Timer(Sender: TObject);
    begin
      if Progress_Bar1.Position>=Progress_Bar1.Max then
        Progress_Bar1.Position:=0
      else
        Progress_Bar1.StepIt;
    end;
      

  5.   

    procedure  TForm1.Timer1Timer(Sender:  TObject);  
    begin  
       if  ProgressBar1.Position  >=ProgressBar1.Max  then  
           ProgressBar1.Position:=0  
       else  
           ProgressBar1.StepIt;  
    end;
      

  6.   

    我们一般在处理大批量数据时与进度条是这样结合的,用二个窗体,Form1为处理数据窗体,Form2为进度条窗体。目的:产生二个进程,可以并行工作。(也可以启动二个线程)
    例如:
    在Form1中
    For I:=1 to 10000000000000 do
    begin
    {
    所处理的事件}
    Form2.Progressbar.position:=Form2.Progressbar.position+1
    end;
    显然你的做法是不行的。
    在同一时刻只有一个进程在工作,即在query.open时Timer是不工作的:)
      

  7.   

    因为你无论是QUERY还是TIMER都用一个线程,所以只有一个线程被激活,要么QUERY运行,要么TIMER运行,解决这样的问题需要使用多线程,请参考多线程。
      

  8.   

    我只是在帖子里说ProgressBar这个词因为含有“sB”不能发贴,并没有特意通知管理员,没想到这么快就把论坛这个bug给改了,这样的工作效率和敬业精神,我是相当的佩服!
      

  9.   

    ========================================
    我们一般在处理大批量数据时与进度条是这样结合的,用二个窗体,Form1为处理数据窗体,Form2为进度条窗体。目的:产生二个进程,可以并行工作。(也可以启动二个线程)
    例如:
    在Form1中
    For I:=1 to 10000000000000 do
    begin
    {
    所处理的事件}
    Form2.Progressbar.position:=Form2.Progressbar.position+1
    end;
    ========================================这种方式的我已经使用过,但只限于处理过程中可以执行ProgressBar1.StepIt的。
    但Adoquery.open时,是不能做其他任何动作的,只能接受后执行ProgressBar1.StepIt。而我想实现在Adoquery.open后,执行查询的过程中,显示进度条,就是执行ProgressBar1.StepIt。目前知道只能用多线程,但比较复杂。
    有高手的话,帮忙给出代码!
      

  10.   

    已经通过线程实现。普通线程应用简单
    数据库多线程查询就问题多多
    ADOQUERY多线程查询不能实现数据库多线程看样子是多线程中最难的,此帖问题已经结束。多线程问题另开帖子讨论!
      

  11.   

    把你的qry設置成異步處理模式看看,
    qry的executeOptions屬性的eoAsysncFecthNonBlocking為true
      

  12.   

    把你的qry設置成異步處理模式看看,
    qry的executeOptions屬性的eoAsysncFecthNonBlocking為trueadoquery设置后依然不好使!