`
lovnet
  • 浏览: 6714987 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
文章分类
社区版块
存档分类
最新评论

深入浅出理解 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 viewData
P_EXIT:
    Exit Sub

P_Err:
    MsgBox "无任何记录!", vbOKOnly + vbCritical, "警告"    '验证无法正常完成
    GoTo P_EXIT
End 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 If
P_EXIT:
    Exit Sub

P_Err:
    txtName.Text = ""
    txtBorndate.Text = ""
    txtSID.Text = ""
    txtRudate.Text = ""
    txtTel.Text = ""
    txtAddress.Text = ""
    txtComment.Text = ""

    MsgBox "无任何记录!", vbOKOnly + vbCritical, "警告"    '验证无法正常完成

    GoTo P_EXIT
End 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,
MoveLast
MovePrevious,
Move < 0

Move 0
MoveNext,
Move > 0
BOF=True,
EOF=False
允许 错误 错误 允许
BOF=False,
EOF=True
允许 允许 错误 错误
同时为 True 错误 错误 错误 错误
同时为 False 允许 允许 允许 允许

允许使用 Move 方法并不能保证该方法成功定位记录,只是意味着调用指定的 Move 方法不会产生错误。

下表说明当调用各种 Move 方法但未成功定位记录时 BOF 和 EOF 属性设置所发生的情况。

BOF EOF
MoveFirst, MoveLast 设置为 True 设置为 True
Move 0 没有变化 没有变化
MovePrevious, Move < 0 设置为 True 没有变化
MoveNext, Move > 0 没有变化 设置为 True

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics