No    CardNo
1   13131368791
2   13131368792
3   13131368793
4   13131368794
上面是要访问的数据库,用Access做的,现在要写一个小程序,要求是,每隔1秒钟访问一条记录,当访问到最后一条记录时隔5秒钟继续从第一条记录开始访问,也就是说每当访问1到4时间隔为1秒,从4到1间隔为5秒,代码如下:
procedure TForm1.Button1Click(Sender: TObject);
var
  i:integer;
begin
  for i:=1 to ADOTable1.RecordCount do
  begin
    edit1.Text:=ADOTable1.FieldByName('CardNo').AsString;
    timer1.Enabled:=true;
  end;
end;procedure TForm1.Timer1Timer(Sender: TObject);
begin
  if ADOTable1.Eof=true then
    begin
      Timer1.Interval := 5000;      timer1.Enabled:=false;
      timer1.Enabled:=true;      ADOTable1.first;
    end
  else
    begin
      ADOTable1.Next;
      Timer1.Interval := 1000;
    end;
  form1.edit1.Text:=form1.ADOTable1.FieldByName('CardNo').AsString;
end;可是运行结果是: 每次访问完4以后间隔1秒开始访问1,间隔5秒再访问2,间隔1秒再访问3,依次推下去,这个5秒好像放错了地方,原本打算是访问1到4时间隔为1秒,从4再到1间隔长一些为5秒,仔细分析代码,也确实就是这个意思,可是为什么运行结果不是呢?究竟哪里出了毛病呀????大家都来帮我分析分析,好吗?我都弄了两天了,急死了~~~

解决方案 »

  1.   

    begin
    if ADOTable1.Eof=true then
    begin
    timer1.Enabled:=false;
    Timer1.Interval := 5000;//放在timer1.enabled := false;后,先停止后改参数看看
    timer1.Enabled:=true;
      

  2.   

    当你到最后一条记录时TIMER设为5秒后就立即指定跳到第一条记录上去了,这个五秒是在第访问第二条记录时生效的当然是1和2之间间隔为5秒了。
      

  3.   

    procedure TForm1.Timer1Timer(Sender: TObject);
    begin
      if not ADOTable1.Eof then
      begin
        ADOTable1.Next;
      end
      else
      begin
        sleep(5000);
        ADOTable1.first;
      end
      form1.edit1.Text:=form1.ADOTable1.FieldByName('CardNo').AsString;
    end;
    应该可以解决你的问题;
      

  4.   

    先谢谢各位了,luxuewei5214(小卢)的办法试过了,跟原来一样,还是不行,zhanghua0020(初出茅庐)的办法我也试过了,结果是:从1访问到4以后,5秒以后开始访问2,接着3和4,再过5秒开始访问3和4,然后就不动了,虽然跟以前结果不一样了,可是还不是预想的结果,这个问题看起来比较简单,解决起来还真是比较棘手,大家有没有更好的办法帮我实现我想要的结果呢?
      

  5.   

    procedure TForm1.Timer1Timer(Sender: TObject);
    begin
       timer1.Enabled:=false;
       if not ADOTable1.Eof then
        begin
          form1.edit1.Text:=form1.ADOTable1.FieldByName('CardNo').AsString;
          ADOTable1.Next;
          Timer1.Interval := 1000;
        end
      else
        begin
          ADOTable1.first;
          Timer1.Interval := 5000;
        end;
        timer1.Enabled:=true;
    end;
    procedure TForm1.Button1Click(Sender: TObject);
    begin
      ADOTable1.Open;
      Timer1.Interval := 1;
      timer1.Enabled := True;
    end;
      

  6.   

    纠正一下:procedure TForm1.Timer1Timer(Sender: TObject);
    begin
       timer1.Enabled:=false;
       if not ADOTable1.Eof then
        begin
          form1.edit1.Text:=form1.ADOTable1.FieldByName('CardNo').AsString;
          ADOTable1.Next;
          Timer1.Interval := 1000;
        end
      else
        begin
          ADOTable1.first;
          Timer1.Interval := 4000;//这里应该是4秒
        end;
        timer1.Enabled:=true;
    end;
      

  7.   

    procedure TForm1.Timer1Timer(Sender: TObject);
    begin
      if not ADOTable1.Eof then
      begin
        ADOTable1.Next;
      end
      else
      begin
        sleep(4000);
        //ADOTable1.first;
        ADOTable1.RecNo:=1;
        sleep(1000);
      end
      form1.edit1.Text:=form1.ADOTable1.FieldByName('CardNo').AsString;
    end;
    这样看看呢?不过我觉得效果好像都一样
      

  8.   

    最好用两个定时器,timer2的间隔为5秒,控制timer1.timer1的间隔为1秒,到第四个数时timer1.enable:=false;timer2.enable:=true;
    在timer2的事件里timer1.enable:=true;
      

  9.   

    非常感谢大家的帮助和支持,delphi72()的方法已经可以了,多谢了!
    还有我曾经用过两个定时器的,timer2的间隔为5秒,timer1的间隔为1秒,代码也写好了,是下面这样的,可是运行结果是确实从第一条开始访问,当访问到最后一条,隔了5秒钟从第二条开始访问,居然把第一条给跳过去了,以后的循环都一样,都是从第二条开始访问的,找了好长时间毛病也没找出来,大家帮忙看看啊!两个定时器代码如下:
    procedure TForm1.Button1Click(Sender: TObject);
    var
      i:integer;
    begin
      for i:=1 to ADOTable1.RecordCount do
      begin
        edit1.Text:=ADOTable1.FieldByName('CardNo').AsString;
        timer1.Enabled:=true;
      end;
    end;procedure TForm1.Timer1Timer(Sender: TObject);
    begin
      //showmessage('ok');
      ADOTable1.Next;
      form1.edit1.Text:=form1.ADOTable1.FieldByName('CardNo').AsString;
      timer2.Enabled:=true;
    end;procedure TForm1.Timer2Timer(Sender: TObject);
    begin
      //showmessage('ok');
      if ADOTable1.Eof=true then
        begin
        ADOTable1.first;
        form1.edit1.Text:=form1.ADOTable1.FieldByName('CardNo').AsString;
        timer1.Enabled:=true;
        end;
    end;
      

  10.   

    procedure TForm1.Timer1Timer(Sender: TObject);
    begin
      ADOTable1.Next;
      form1.edit1.Text:=form1.ADOTable1.FieldByName('CardNo').AsString;
      if ADOTable1.Eof then
      begin
        timer2.Interval := 4000;   //注意这里还是4秒,因为Timer1需要1秒才能响应到这
        timer2.Enabled:=true;
        timer1.Enabled:=false;
      end;
    end;procedure TForm1.Timer2Timer(Sender: TObject);
    begin
        ADOTable1.first;
        form1.edit1.Text:=form1.ADOTable1.FieldByName('CardNo').AsString;
        timer1.Enabled:=true;
        timer2.Enabled:=false;
    end;
      

  11.   

    太感谢delphi72了,现在已经可以了,不管是两个定时器的还是一个定时器的,都达到我想要的结果了,感谢!!!