数据集 BOF 和 EOF 不能确定的问题(50分)

  • 主题发起人 主题发起人 savetime
  • 开始时间 开始时间
数据集当前记录指针指向第一条的前一条时,Bof为真,指向最后一条的下一条时
Eof为真(这里的“前一条”和“后一条”是逻辑上的记录)所以才会出现你们所说
的现象,first是直接定位到Bof位置,Last也是直接定位到Eof的位置。而用next和prior
时,无论指针指向第一条记录还是最后一条记录Bof和Eof都不会为真。只有指向第一条时
再按一下Prior键bof才为真...
 
这是正常的现象。这不是问题。
EOF为True表示当前记录是数据集上的最后一上,但在数据集最后一个时并不表示EOF为真。
就像马是四条腿的,但四条腿的不一定是马。
有书为证。<<Delphi3.0编程参考手册>>中对数据集的EOF属性的描述:仅当数据集第一次
打开且为空时、在调用Last方法之后、或调用Next方法失败之后数据集的EOF为真
 
to Tuatara, greenwon等
可能是我的意思没有表达清楚,你们描述的是现象,我想讨论的是为什么以及
是否有更好的方法

to snowboat,
想了一下,你讲的方便循环操作很有道理,如果DataSet新增以下属性
IsFirst(在首记录)、IsLast(在末记录)那也不错,是不是实现的难度太高了
 
我也发现有这种情况,使得在循环种判断开始和结束得时候总是多走一次。最后只能通过
代码自己来修正了。
循环时判断一下当前游标的下一个(或上一个)位置是否为Eof(Bof)。
 
应用程序的副本是指exe文件的副本,数据库可能是SQL Server,如果两个用户同时
访问一个数据表,当然DataSet是指exe文件中当前取得的记录集,一个用户更改了
他的数据集,是不是要通知另一个用户?不可能的,只能在另一个用户请求的情况
下,他所在的数据集才会更新,所以才会有锁的概念。
 
to ysai
我看不太懂你这段的意思,重新看了一遍所有的贴子,感觉我们问的是同一个问题
(1)我的问题里有这句话
《Delph4开发大全》说这是因为另一个用户或者程序的另一个进程有可能
在数据集中插入了新的记录
(2)《Delphi4开发大全》在Delphi书籍中还有些权威

我也是在质颖这句话中情况的可能性。
 
分太少了,换了个地方
http://www.delphibbs.com/delphibbs/dispq.asp?lid=1354950
 
如果DataSet新增以下属性
IsFirst(在首记录)、IsLast(在末记录)那也不错,是不是实现的难度太高了


if RecNo=1 then IsFirst;
if RecNO=RecCount then IsLast;
 
关键是 RecCount不一定正确,可能为0
见http://www.delphibbs.com/delphibbs/dispq.asp?lid=1354950
 
后退
顶部