深入浅出理解 BOF和EOF
在做学生管理的过程中,多次运用BOF和EOF,使文章的逻辑更加的鲜明,刚开始理解不是很到位、有点小偏差,随着大家的交流与学习,逐渐加强了对其的认识,接下来大家共同学习!

解释说明:
ADO Recordset 对象用于容纳一个来自数据库表的记录集。一个 Recordset 对象由记录和列(字段)组成。
在 ADO 中,此对象是最重要且最常用于对数据库的数据进行操作的对象。
BOF (Before of File)指示当前记录位置位于 Recordset 对象的第一个记录之前。
Private Sub previousCommand_Click()On Error GoTo P_Err'错误语句 mrc.MovePrevious If mrc.BOF Then '如果当前记录位于第一个记录,则移向最后一个记录 mrc.MoveLast End If Call viewDataP_EXIT: Exit SubP_Err: MsgBox "无任何记录!", vbOKOnly + vbCritical, "警告" '验证无法正常完成 GoTo P_EXITEnd Sub
EOF(End of File) 指示当前记录位置位于 Recordset 对象的最后一个记录之后。
Private Sub deleteCommand_Click() On Error GoTo P_Err myBookmark = mrc.Bookmark '标记 Str2$ = MsgBox("是否删除当前记录?", vbOKCancel, "删除当前记录") If Str2$ = vbOK Then '首先是先测试是否要删除的记录为最后一条记录 mrc.MoveNext '如果为最后,则先把当前记录移动到第一个 If mrc.EOF Then mrc.MoveFirst '书签移动到第一个 mybookmarl = mrc.Bookmark mrc.MoveLast '然后在移动到最后 mrc.Delete '删除 mrc.Bookmark = myBookmark '找到刚才的书签 Call viewData Else myBookmark = mrc.Bookmark '标记如果不是最后一个 mrc.MovePrevious '标记下一个,因为删除以后就要移动到下一个 mrc.Delete '删除 mrc.Bookmark = myBookmark ' 找回刚才标记的书签 Call viewData End If '显示记录 Else mrc.Bookmark = myBookmark '取消标记 Call viewData End IfP_EXIT: Exit SubP_Err: txtName.Text = "" txtBorndate.Text = "" txtSID.Text = "" txtRudate.Text = "" txtTel.Text = "" txtAddress.Text = "" txtComment.Text = "" MsgBox "无任何记录!", vbOKOnly + vbCritical, "警告" '验证无法正常完成 GoTo P_EXITEnd Sub
返回值:BOF 和 EOF 属性返回布尔型值。
使用 BOF 和 EOF 属性可确定 Recordset对象是否包含记录,或者从一个记录移动到另一个记录时是否超出 Recordset 对象的限制。
下面分几种情况来讨论学习:
1:如果当前记录位于第一个记录之前,BOF 属性将返回 True (-1),如果当前记录为第一个记录或位于其后则将返回 False (0)。
2:如果当前记录位于 Recordset 对象的最后一个记录之后 EOF 属性将返回 True,而当前记录为 Recordset 对象的最后一个记录或位于其前,则将返回 False。
3:如果 BOF 或 EOF 属性为 True,则没有当前记录。
4:如果打开没有记录的 Recordset 对象,BOF 和 EOF 属性将设置为 True,而 Recordset 对象的 RecordCount属性设置为零。打开至少包含一条记录的 Recordset 对象时,第一条记录为当前记录,而 BOF 和 EOF 属性为 False。
5:如果删除 Recordset 对象中保留的最后记录,BOF 和 EOF 属性将保持 False,直到重新安排当前记录。
以下表格说明不同 BOF 和 EOF 属性组合所允许的 Move 方法。
MoveFirst,
MoveLastMovePrevious,
Move < 0
Move 0MoveNext,
Move > 0BOF=True,
EOF=False允许错误错误允许BOF=False,
EOF=True允许允许错误错误同时为 True错误错误错误错误同时为 False允许允许允许允许
允许使用 Move 方法并不能保证该方法成功定位记录,只是意味着调用指定的 Move 方法不会产生错误。
下表说明当调用各种 Move 方法但未成功定位记录时 BOF 和 EOF 属性设置所发生的情况。
BOFEOFMoveFirst, MoveLast设置为 True设置为 True Move 0没有变化没有变化MovePrevious, Move < 0设置为 True没有变化MoveNext, Move > 0没有变化设置为 True
- 20楼cjr152336611432小时前
- 真受不了你
- Re: lishehe2小时前
- 回复cjr15233661143n那就再胖点,嘿嘿
- 19楼wangxuhebeibd2小时前
- [e01]
- Re: lishehe2小时前
- 回复wangxuhebeibdn谢谢,呵呵加油
- 18楼kanglix1an2小时前
- 学习了~~~
- Re: lishehe2小时前
- 回复kanglix1ann加油,六
- 17楼huo_yun3小时前
- 大牛。。。
- Re: lishehe2小时前
- 回复huo_yunn[e04]
- 16楼han_yankun2009昨天 17:55
- 加油
- Re: lishehe昨天 20:08
- 回复han_yankun2009n坤哥加油
- Re: sunliduan昨天 21:03
- 很棒啊,社和!回复han_yankun2009
- Re: lishehe昨天 23:33
- 回复sunliduann加油
- 15楼liutengteng130昨天 17:07
- 再好好理解一下,呵呵。加油。
- Re: lishehe昨天 17:37
- 回复liutengteng130n噢噢噢噢,[e03]
- 14楼mazhaojuan昨天 14:36
- 总结出来,很清晰!
- Re: lishehe昨天 16:02
- 回复mazhaojuann继续努力ing
- 13楼hejingyuan6昨天 14:36
- 呵呵
- Re: lishehe昨天 14:36
- 回复hejingyuan6n[e04]
- 12楼song_mou_xia昨天 14:35
- 学习了。。
- Re: lishehe昨天 14:35
- 回复song_mou_xian互相努力
- 11楼cimayang昨天 14:34
- 不错,写的好详细。
- Re: lishehe昨天 14:34
- 回复cimayangn[e04]
- 10楼dandanzmc昨天 14:33
- 学习
- Re: lishehe昨天 14:34
- 回复dandanzmcn学习,加油
- 9楼a1314517love昨天 14:32
- 深入理解,长收
- Re: lishehe昨天 14:32
- 回复a1314517loven嗯[e04]
- 8楼zhang_xinxiu昨天 14:31
- 嗯……很重要啊
- Re: lishehe昨天 14:32
- 回复zhang_xinxiu是,理解这方面得想你学习,结合生活
- 7楼www_qnyxrjz_com昨天 11:49
- 有用。也学习
- Re: lishehe昨天 14:10
- 回复www_qnyxrjz_comn相互学习
- 6楼xjc1278003262昨天 09:09
- 不错,加油!
- Re: lishehe昨天 10:14
- 回复xjc1278003262n加油
- 5楼leimengyuanlian昨天 08:17
- 有感触
- Re: lishehe昨天 08:33
- 回复leimengyuanliann共鸣学习
- 4楼JohnnyDengy昨天 08:00
- 项一下,,可惜看不懂。。。。
- Re: lishehe昨天 08:07
- 回复JohnnyDengyn没事,加油,很快就会看懂的
- 3楼wlccomeon昨天 07:58
- 好啊,学习啦![e03]
- 2楼yinjingjing198808昨天 07:46
- 很清晰!
- Re: lishehe昨天 07:56
- 回复yinjingjing198808n向师姐学习
- 1楼yudandan10昨天 07:43
- 写的真好
- Re: lishehe昨天 07:45
- 回复yudandan10n互相学习