我写了一个循环,我感到很奇怪,当数据库的记录为>=3条以上时,就能正常执行,可是当<3条时就执行两次啊请高手帮小弟看一下这个循环!!谢谢!!代码如下:
Const Systemdir='\\gxl\xml\';
procedure TForm1.Timer1Timer(Sender: TObject);
var
I: Integer;
s:string;
begin
timer1.Enabled:=false;
with adoquery2 do
begin
Close;
SQL.Clear;
SQL.Add('select * from xml');
Open;
end;
adoquery2.First;
while not adoquery2.Eof do
begin
if (adoquery2.FieldByName('data').AsBoolean<>true) and (adoquery2.FieldByName('accesstime').AsString='') then
begin
for I :=0 to adoquery2.RecordCount-1 do
begin
s:=Systemdir+adoquery2.fieldbyname('filename').AsString;
with adoquery1 do
begin
Close; //将访问时间更新进去
SQL.Clear;
SQL.Add('update xml set accesstime='''+datetimetostr(now())+'''');
SQL.Add('where filename='''+adoquery2.fieldbyname('filename').AsString+'''');
Prepared;
ExecSQL;
end; end;
ExecuteParser(s); //函数执行该字符串
with adoquery1 do
begin
Close; //将标识符更新
SQL.Clear;
SQL.Add('update xml set data=true');
SQL.Add('where filename='''+adoquery2.fieldbyname('filename').AsString+'''');
Prepared;
ExecSQL;
end;
end;
adoquery2.Next;
end;
timer1.Enabled:=true;
end;end.
Const Systemdir='\\gxl\xml\';
procedure TForm1.Timer1Timer(Sender: TObject);
var
I: Integer;
s:string;
begin
timer1.Enabled:=false;
with adoquery2 do
begin
Close;
SQL.Clear;
SQL.Add('select * from xml');
Open;
end;
adoquery2.First;
while not adoquery2.Eof do
begin
if (adoquery2.FieldByName('data').AsBoolean<>true) and (adoquery2.FieldByName('accesstime').AsString='') then
begin
for I :=0 to adoquery2.RecordCount-1 do
begin
s:=Systemdir+adoquery2.fieldbyname('filename').AsString;
with adoquery1 do
begin
Close; //将访问时间更新进去
SQL.Clear;
SQL.Add('update xml set accesstime='''+datetimetostr(now())+'''');
SQL.Add('where filename='''+adoquery2.fieldbyname('filename').AsString+'''');
Prepared;
ExecSQL;
end; end;
ExecuteParser(s); //函数执行该字符串
with adoquery1 do
begin
Close; //将标识符更新
SQL.Clear;
SQL.Add('update xml set data=true');
SQL.Add('where filename='''+adoquery2.fieldbyname('filename').AsString+'''');
Prepared;
ExecSQL;
end;
end;
adoquery2.Next;
end;
timer1.Enabled:=true;
end;end.
解决方案 »
- 类似于delphi中"Run"的按钮
- 剪刀请进,把我那个名额干掉吧……
- indy 中的多现程问题。
- 请看有关SQL动态参数的问题!!
- 当窗体最小化时,用的内存比窗体最大化时小很多,这是怎么回事??
- 有没有数学好的,给算一道小学3年级的数学题,我侄子的数学作业,把我给难倒了
- 类型的转换
- 用winexec()执行一个exe文件后,怎么判断exe已经执行完毕?
- 请高手帮忙!about TApplicationEvent.OnIdle and MainMenu!
- 在程序中用到了数据集组件,当程序启动后,出现登录数据库的对话框,请问如何隐藏它啊
- 菜鸟求助~~
- 用Delphi怎么操作http://www.a.com/a.mdb数据库中的表,实现增删改
begin
s:=Systemdir+adoquery2.fieldbyname('filename').AsString;
with adoquery1 do
begin
Close; //将访问时间更新进去
SQL.Clear;
SQL.Add('update xml set accesstime='''+datetimetostr(now())+'''');
SQL.Add('where filename='''+adoquery2.fieldbyname('filename').AsString+'''');
Prepared;
ExecSQL;
end; end; 在这段里有错误,既然用
for I :=0 to adoquery2.RecordCount-1 do
何必
with adoquery1 do更新一个有N次的循环,还是你搞错 adoquery1 adoquery2了,建议用名称,不要用xxx1,xxx2