No CardNo
1 13131368791
2 13131368792
3 13131368793
4 13131368794
上面是要访问的数据库,用Access做的,现在要写一个小程序,要求是,每隔2秒钟访问一条记录,当访问到最后一条记录时隔5秒钟继续从第一条记录开始访问,我设的timer1为2秒,timer2为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);
var
i:integer;
begin
ADOTable1.Next;
form1.edit1.Text:=form1.ADOTable1.FieldByName('CardNo').AsString;
timer2.Enabled:=true;
end;procedure TForm1.Timer2Timer(Sender: TObject);
begin
if ADOTable1.Eof=true then
ADOTable1.first;
form1.edit1.Text:=form1.ADOTable1.FieldByName('CardNo').AsString;
timer1.Enabled:=true;
end;
运行程序后结果是确实从第一条开始访问,当访问到最后一条,隔了5秒钟从第二条开始访问,居然把第一条给跳过去了,以后的循环都一样,都是从第二条开始访问的,找了好长时间毛病也没找出来,大家帮忙看看啊!怎样改才能不条过第一条,让它每次访问到最后一条记录隔5秒再从第一条开始呢?这么短的代码,我改了一下午就是没找到原因,大家帮帮我啊,急死我了~~~
1 13131368791
2 13131368792
3 13131368793
4 13131368794
上面是要访问的数据库,用Access做的,现在要写一个小程序,要求是,每隔2秒钟访问一条记录,当访问到最后一条记录时隔5秒钟继续从第一条记录开始访问,我设的timer1为2秒,timer2为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);
var
i:integer;
begin
ADOTable1.Next;
form1.edit1.Text:=form1.ADOTable1.FieldByName('CardNo').AsString;
timer2.Enabled:=true;
end;procedure TForm1.Timer2Timer(Sender: TObject);
begin
if ADOTable1.Eof=true then
ADOTable1.first;
form1.edit1.Text:=form1.ADOTable1.FieldByName('CardNo').AsString;
timer1.Enabled:=true;
end;
运行程序后结果是确实从第一条开始访问,当访问到最后一条,隔了5秒钟从第二条开始访问,居然把第一条给跳过去了,以后的循环都一样,都是从第二条开始访问的,找了好长时间毛病也没找出来,大家帮忙看看啊!怎样改才能不条过第一条,让它每次访问到最后一条记录隔5秒再从第一条开始呢?这么短的代码,我改了一下午就是没找到原因,大家帮帮我啊,急死我了~~~
begin
if ADOTable1.Eof=true then
begin//
ADOTable1.first;
form1.edit1.Text:=form1.ADOTable1.FieldByName('CardNo').AsString;
timer1.Enabled:=true;
end;//
end;
试试
procedure TForm1.Timer1Timer(Sender: TObject);
var
i:integer;
begin
ADOTable1.Next;
form1.edit1.Text:=form1.ADOTable1.FieldByName('CardNo').AsString;
timer2.Enabled:=true;
if ADOTable1.Eof=true then
ADOTable1.first;
form1.edit1.Text:=form1.ADOTable1.FieldByName('CardNo').AsString;
end;
其余的与我第一边发的一样,结果是timer2的时间不起作用,每次访问完了4,隔2秒直接又访问1 了,请大家帮我想想办法,怎样才能访问完了4,隔5秒后直接访问1呢?
var
i:integer;
begin
if ADOTable1.Eof=true then
begin
if Timer1.Interval = 2000 then
Timer1.Interval := 5000
else
Timer1.Interval := 2000; timer1.Enabled:=false;
timer1.Enabled:=true; ADOTable1.first;
end
else
ADOTable1.Next; form1.edit1.Text:=form1.ADOTable1.FieldByName('CardNo').AsString;
end;
begin
form1.edit1.Text:=form1.ADOTable1.FieldByName('CardNo').AsString;
ADOTable1.Next;
timer1.Enabled:=true;
end;procedure TForm1.Timer1Timer(Sender: TObject);
begin
i:=i+1;//请将i定义到form1的var下
if i=2 then
begin
form1.edit1.Text:=form1.ADOTable1.FieldByName('CardNo').AsString;
ADOTable1.Next;
if adotable1.eof then
begin
timer2.Enabled:=true;
timer1.Enabled:=false;
end;
i:=0;
end;
end;procedure TForm1.Timer2Timer(Sender: TObject);
begin
js:=js+1;//请将js定义到form1的var下
if js=5 then
begin
timer1.Enabled:=True;
timer2.Enabled:=false;
ADOTable1.first;
js:=0;
end;
end;
procedure TForm1.Timer1Timer(Sender: TObject);
var
i:integer;
begin
if ADOTable1.Eof=true then
begin
Timer1.Interval := 5000; timer1.Enabled:=false;
timer1.Enabled:=true; ADOTable1.first;
end
else
ADOTable1.Next; form1.edit1.Text:=form1.ADOTable1.FieldByName('CardNo').AsString;
Timer1.Interval := 2000;
end;
procedure TForm1.Delay(msecs:integer);
var
FirstTickCount:longint;
begin
FirstTickCount:=GetTickCount;
repeat
Application.ProcessMessages;
until ((GetTickCount-FirstTickCount) >= Longint(msecs));
end;procedure TForm1.AutoShow; //自定义一个过程
begin
if ADOTable1.Eof=true then
begin
Delay(5000);//延时5" ADOTable1.first;
end
else begin
Delay(2000);//延时2"
ADOTable1.Next;
end; form1.edit1.Text:=form1.ADOTable1.FieldByName('CardNo').AsString;end;只要执行AutoShow应该就可以了,感觉这种效果比较好,CPU占用也小,文件也小些.
procedure TForm1.Timer1Timer(Sender: TObject);
var
i:integer;
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 := 2000; //要放在这里
end; form1.edit1.Text:=form1.ADOTable1.FieldByName('CardNo').AsString;
end;
还有后来你又给出的 //我大意了,呵呵 这段代码,我试过了,每次访问完4以后间隔2秒开始访问1,间隔5秒再访问2,间隔1秒再访问3,依次推下去,这个5秒好像放错了地方,唉!咋这么难改呢,难道是我今晚头脑太混乱了,都把代码弄乱了?唉!明天再继续改吧,头都大了!
procedure TForm1.Timer1Timer(Sender: TObject);
var
i:integer;
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 := 2000; //要放在这里
end; form1.edit1.Text:=form1.ADOTable1.FieldByName('CardNo').AsString;
end;
-------------------------------------------------------------------------------------
根据你上面的代码,运行结果是:每次访问完4以后间隔2秒开始访问1,间隔5秒再访问2,间隔2秒再访问3,依次推下去,这个5秒好像放错了地方,原本打算是访问1到4时间隔为2秒,从4再到1间隔长一些为5秒,仔细分析代码,也确实就是这个意思,可是为什么运行结果不是呢?究竟哪里出了毛病呀????大家都来帮我分析分析,好吗?我都弄了两天了,急死了~~~