探秘BOF 和EOF


       学生信息管理系统敲完了,之前刚接触数据库时,仅仅出现的新名词就能把你脑子搅得跟浆糊一样。经过红皮书和学生信息管理系统的洗礼,与前几个月刚接触数据库时相比,对它涉及到的知识的理解深刻了许多,其中不是很起眼但又起着重要作用的两个属性——BOFEOF就是如此。

       与它们的第一次谋面是在敲红皮书的时候,但当时对其用法理解扭曲,也没有重视,直到在学生信息管理系统的过程中才发现它倆的重要性。

 

        BOFEOF是Recordset(记录集)对象的一对返回值类型为布尔型的属性。

        BOF指向当前记录位置位于Recordset对象的第一个记录之前EOF指向当前记录位置位于Rocordset对象的最后一个记录之后注意BOF并不是指当前记录位置位于Recordset对象的第一个记录,同样EOF并不是指当前记录位于Recordset对象的最后一个记录。

       下面这两段代码可以很好的说明:

正确的代码:

private sub nextCommand_Click()
      mrc.MoveNext     'mrc为一个记录集对象
      If mrc.EOF then
            mrc.MoveFirst
      End if
      Call viewData    'viewData为一个在窗体上显示当前记录的函数
End sub

错误的代码:      

private sub nextCommand_Click()
      If mrc.EOF then
           mrc.MoveFirst
      Else
           mrc.MoveNext     'mrc为一个记录集对象
      End if
      Call viewData    'viewData为一个在窗体上显示当前记录的函数
End sub

       这段代码实现的功能是显示下一个记录,正确的做法是先让记录下移(无论当前记录是否为最后一个),其实可以把当前记录赋予一个指针,把数据库中的记录看作成内存地址,当下移后的指针指向最后一个地址块之后时(即下移后,记录如果指向最后一个记录之后),EOF的返回值为True。

                                                                                                                            探秘BOF 和EOF_第1张图片

       为了理解更明了一些,画了一张图(如右图)来解释EOF和BOF,假设记录集中一共有n条记录,当当前记录指针指向第一条记录之前时,BOF属性值为True;当前记录指向中间1~n任意一条记录时,BOF和EOF属性值

都为False;当前记录指向最后一条记录之后时,EOF

属性值为True。

      

       当然,EOF和BOF合起来也可以实现一些功能,比如:

       当判断语句BOF And EOF时,如果结果为True即它们倆的返回值都为True时则表明当前记录集中没有任何记录;而当记录中只有一个记录并处于该记录位置时,BOF和EOF的返回值都为False。


 

 

        

你可能感兴趣的:(探秘BOF 和EOF)