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;
问题是,一直搞不懂这表的最后一个记录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;
解决方案 »
- 我在程序中使用了clipboard,其它程序使用剪贴板就出问题
- 求助一个小问题(菜单栏上的)
- delphi通配符问题
- 中间件发布
- 请教函数SendTo那个单元中定义?
- 为什么ADOConnection 的数据库连接提供者没有 OLE DB For sQL server?
- 急!!!在线等待高手!!!在delphi中TEdit除了Text属性可以保存数据,还有什么属性可以保存数据,我还需要保存text数据所对应的代码。
- 删除光标前的字符的消息常量是什么?
- 回收站编程的问题!
- TMD 倒霉,我替hhbcom发分,竟然把我自己的分发了,苦苦苦苦!!!
- c/s 访问速度慢的问题?
- 客户端插入ACCESS数据库的问题
这话的意思不是当"指向最后一条记录"为假时,执行下面的语句吗,那假如选到了last不就是
DataModule2.TBClass.Eof为真的了吗,导致整个循环语句的判断部分为假,那就不能执行下面的语句了啊
这时候DataModule2.TBClass.Eof并不会被记录为true.因为DataModule2.TBClass.Eof是记录上次操作有没有错.你是倒数第二条,再next当然不会出错.只有当你是最后一条,再执行一次next的时候eof才变成true.你可以用单步调试看下eof的值是在什么时候变化的
数据库只有两条记录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自己理解理解...
而是再执行一次query.Next时,查不到数据,query.Eof才为真仅供参考而已...
LZ认为说的对,结帖时给点分,不然就算了!嘿嘿~~
如记录
1
2
3 <-最后一条记录
<-判断是否到达eof