日期:2014-05-16  浏览次数:20662 次

指南针之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 ,然后找到最后一条记录张连海、男。接下来要