delphi的Table的最后是不是有一条隐藏的空记录?不然下面这段代码有点理解不了。 这段代码运行的结果是:一旦运行,表TBClass中的字段Authorized就全部变为True
问题是,一直搞不懂这表的最后一个记录TBClass.Last是什么时候变成True
这段代码明明只是给非Last的赋值成True嘛procedure TForm1.Button7Click(Sender: TObject);
begin
  DataModule2.TBClass.First;      //记录指针移到第一条记录
  while not DataModule2.TBClass.Eof  do      //Eof布尔类型,用来判断是否指向最后一条记录
    begin
       DataModule2.TBClass.Edit;      //使Table处于可编辑状态
       DataModule2.TBClass.FieldByName('Authorized').AsBoolean:=True;      //给TBClass表的字段Authorized赋值,变成True
       DataModule2.TBClass.Post;      //编辑的传递(保存)
       DataModule2.TBClass.Next;      //使记录指针指向下一条记录    end;
end;

解决方案 »

  1.   

      while not DataModule2.TBClass.Eof  do 就是选到last的
      

  2.   

     "while not DataModule2.TBClass.Eof  do "
     
    这话的意思不是当"指向最后一条记录"为假时,执行下面的语句吗,那假如选到了last不就是
    DataModule2.TBClass.Eof为真的了吗,导致整个循环语句的判断部分为假,那就不能执行下面的语句了啊
      

  3.   

    DataModule2.TBClass.Eof 准确来说判断的不是是否指向最后一条记录,而是在最后一条记录后又执行过一次DataModule2.TBClass.Next;
      

  4.   

    不是如果已经是最后一条的话,再执行DataModule2.TBClass.Next;后还是指向的最后一条记录,但DataModule2.TBClass.Eof会被记录为true,表示上次操作有错误(已经最后了,再next当然有错)
      

  5.   

    那如果运行到倒数第二条,执行DataModule2.TBClass.Next后,DataModule2.TBClass.Eof被记录为true,那么循环不是中断了,也就表示最后一条其实还没被执行,而实际的情况是最后一条也执行了~人笨还是有点不懂~
      

  6.   

    你还是没理解那如果运行到倒数第二条,执行DataModule2.TBClass.Next后
    这时候DataModule2.TBClass.Eof并不会被记录为true.因为DataModule2.TBClass.Eof是记录上次操作有没有错.你是倒数第二条,再next当然不会出错.只有当你是最后一条,再执行一次next的时候eof才变成true.你可以用单步调试看下eof的值是在什么时候变化的
      

  7.   

    举个例子
    数据库只有两条记录1,2query.First; //先定位到第一条while not query.Eof  do     
        begin 
          ...          //对当前记录的各种操作
           query.Next; //记录移到下一条
        end; 
    end; 1.第一次执行query.Eof当然为假,所以执行循环体语句
    2.执行循环体内Query.Next;记录移到第二条,此时他并不知道下面还有没有记录,所以query.Eof还是为假
    3.所以while not query.Eof  do返回真,继续执行循环体
    4.再一次执行query.Next;此时查到后面已没有了记录,所以query.Eof返回真
    5.再一次执行while not query.Eof do , 此时,query.Eof已经为真,也就是说while not query.Eof do 为假,所以跳出循环
    6.所以数据库内两条记录都进行了操作不知道说的对不对,LZ自己理解理解...
      

  8.   

    LZ,给你一个简单通俗的理解:query.Eof 并不是当前指针处于最后一条记录时就变为真
    而是再执行一次query.Next时,查不到数据,query.Eof才为真仅供参考而已...
    LZ认为说的对,结帖时给点分,不然就算了!嘿嘿~~
      

  9.   

    query.eof指record指针是否到达最后一条记录,并不是指是不是最后一条记录。
    如记录
    1
    2
    3 <-最后一条记录
    <-判断是否到达eof