指南针之BOF和EOF

        最近敲了下学生信息管理系统,尽管耗时比较长,出了各色各样的错误!但是欣喜的是发现了很多东西,这些东西对于我来说无疑是财宝。首先下我遇到的问题之一:BOF和EOF,初次接触感觉很难理解,后来做着做着就有点感觉了,这感觉不一定对,但我把EOF和BOF画了一张表,大家多多提出自己看法,看看如何改进会更利于理解。   


    这张图的地位:可别小看这张图和这两个词。这可是简约而不简单的。这里涉及到Recordset对象记录集,数据库中包含表,表中包含数据,而这些数据就位于这个记录集Recordset对象中,BOF和EOF是对这个表中数据的操作时用的,这个过程中肯定会锻炼你的思维和想象能力,所以不容小视这几个概念的理解。

    BOF
 (Before of File)指示当前记录位置位于 Recordset 对象的第一个记录之前。
   EOF(End of File) 指示当前记录位置位于 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,直到重新安排当前记录。
 

     当然,只是文字和图片还是有些突兀,有些例子说明就更好了。那就举我前些天完成的学生信息管理系统来说吧!这些代码看似简单,但实质不然,细细的分析并总结过后就会发现很对细节的问题,随便拿出一个来就够你研究半天。积累阶段应该做些尝试……就比方这段代码。

 Private Sub deleteCommand_Click()
        mybookmark = mrc.Bookmark                      '将数据库的记录赋值给空记录,做标记
        str2$ = MsgBox("是否删除当前纪录?", vbOKCancel, "删除当前记录")
        If str2$ = vbOK Then                           '如果选择删除记录
          mrc.MoveNext                                 '只要有记录集数据库会一直向下移动(这是大前提)
             If mrc.EOF Then             '第一种情况:如果已经执行到完整个记录集,要删除最后一条记录
               mrc.MoveFirst                           '则指向刚开始的记录(做个标记)
               mybookmark = mrc.Bookmark
               mrc.MoveLast                            '返回最后一个记录
               mrc.Delete                              '实行删除操作
               mrc.Bookmark = mybookmark               '找到刚才的标记
               Call viewdata
            Else
               mybookmark = mrcbookmark  '第二种情况:删除除最后一条以外的其他记录(还是先赋值做标记)
               mrc.MovePrevious                        '向最后一条记录以上的记录移动
               mrc.Delete                              '删除
               mrc.Bookmark = mybookmark               '找到刚才的标记
               Call viewdata
           End If
      Else
         mrc.Bookmark = mybookmark          '如果选择不删除记录按钮,同样要做标记,只是找到开始标记处  
         Call viewdata
     End If
End Sub
        删除最后一条记录举例:我要删除连海、男最后一条记录,指针的操作是,首先往下执行也就是Mrc.movenext ,然后找到最后一条记录张连海、男。接下来要删除了,那么此时不是直接删除,而是返回到第一条记录,也就是白云、女那条记录,先做个标记,确保我删除最后一条连海、男后能顺藤摸瓜返回来。在已经做好标记的情况下,返回最后一条记录然后顺利删除这个信息。这里删除最后一条连海这条记录后,后面没有记录了,所以必须做标记……

    删除除最后一条记录以外记录举例:我要删除黑土,那么这个比较简单,直接指向黑土并做在前面标记,直接删除就行。因为删了黑土还有张三或者白云记录……

    这个删除记录的过程实质就是漫游森林的一个过程,茫茫森林,必须要做个标记才不至于迷路;也可以想象成指明灯……

    这就是我对BOF和EOF的理解,我觉得虽然是有些理解了,但是可能还是有错误。请大家多提宝贵建议,多多交流……



评论 15
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值