EOF和BOF的区别

产生

使用ADO连接数据库进行查询的时候,数据库将查询结果返回查询端,在查询端的内存里面就会有一个列表,这个列表存放的就是查询的结果。这个内存中的列表就是数据集。在你的程序里面rs就是表示这个数据集。BOF表示rs当前的指针是指在了数据集的前面,比如数据集里面有编号为1,2,3,4的4条记录,但是rs指向的编号是-1,这样就会符合了BOF的情况。同理,当rs的指针指向5,而第五条记录并不存在,这样就会产生了EOF的情况。

程序如果在这些地方出现问题,就会产生一个提示代号为‘3021’的错误。


认识

BOF:指当前记录位置位于Recordset对象的第一个记录之前

EOF:指当前记录位置位于Recordset对象的最后一个记录之后


作用


这两个的属性值均返回布尔型:TrueFalse,使用BOF

和 EOF属性可确定 Recordset对象是否包含记录,或者从一个记录移动到另一个记录时是否超出 Recordset对象的限制。下表即为使用EOF和BOF的查询结果。



理解


1.如果当前记录位于第一个记录之前,BOF属性将返回 True,如果当前记录为第一个记录或位于其后则将返回 False

2.如果当前记录位于Recordset对象的最后一个记录之后 EOF属性将返回True,而当前记录为Recordset对象的最后一个记录或位于其前,则将返回 False。 

3.如果BOFEOF属性为 True,则没有当前记录。

4.如果打开没有记录的Recordset对象,BOF EOF属性将设置为True,而 Recordset对象的 RecordCount属性设置为零。打开至少包含一条记录的 Recordset对象时,第一条记录为当前记录,而BOF EOF属性为 False

5.如果删除Recordset对象中保留的最后记录,BOFEOF属性将保持 False,直到重新安排当前记录。


配合Move使用


配合MoveFirstMoveLastMovePreviousMoveNext四种方法使用。

1.一般来说,当需要对记录集Recordset中的所有行进行操作时,代码可以使用MoveNext,循环遍历各行,直到EOF属性被置为True

2.如果当 EOF 被置为 True 时再使用 MoveNext ,或当BOF被置为 True 时再使用 MovePrevious ,都将产生一个提示代号为‘3021’的错误。


下表为用不同EOF和BOF属性所允许的Move方法。



用法


    If objRs.BOF Then                
    '表示:当前指针的位置是在第一行记录之前,则...
    If objRs.EOF Then
    '表示:当前指针的位置是在最后一行记录之后,则...
    If Not objRs.EOF Then
    '表示:当前指针的位置没有到达最后一条记录
    If Not objRs.BOF then
    '表示:当前指针的位置没有到达第一条记录
    '推荐使用下面两条
    If Not (objRs.BOF AND objRs.EOF) Then
    '表示:指针位于RecordSet 的当中(并非是最后一条和第一条) ,说明一定有记录。
    If objRs.BOF AND objRs.EOF Then
    '表示:没有任何记录


在你查询的表中没有数据,可能是SQL的问题也可能是真的没有数据。只要加上一个出错处理就可以了。

on error resume next 
rss.movefirst 
if err=3021 then 
response.write "无数据!" 
end if



Good luck always go around with you!






  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 53
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 53
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值