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 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秒,仔细分析代码,也确实就是这个意思,可是为什么运行结果不是呢?究竟哪里出了毛病呀????大家都来帮我分析分析,好吗?我都弄了两天了,急死了~~~
if ADOTable1.Eof=true then
begin
timer1.Enabled:=false;
Timer1.Interval := 5000;//放在timer1.enabled := false;后,先停止后改参数看看
timer1.Enabled:=true;
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;
应该可以解决你的问题;
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;
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;
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;
这样看看呢?不过我觉得效果好像都一样
在timer2的事件里timer1.enable:=true;
还有我曾经用过两个定时器的,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;
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;