我写了一个循环,我感到很奇怪,当数据库的记录为>=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.

解决方案 »

  1.   

    当你更新数据库后,一定要注意最后一次的更新操作是否保存了下来,如果没有,请用post之类的语句保存后再执行其它操作,否则最后一条记录很容易丢失
      

  2.   

    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;  在这段里有错误,既然用
                for I :=0 to adoquery2.RecordCount-1 do
    何必
                      with adoquery1 do更新一个有N次的循环,还是你搞错 adoquery1 adoquery2了,建议用名称,不要用xxx1,xxx2