版权声明:本文为博主原创文章,未经博主允许不得转载。 https://cloud.tencent.com/developer/article/1336825
学生信息管理系统敲完了,之前刚接触数据库时,仅仅出现的新名词就能把你脑子搅得跟浆糊一样。经过红皮书和学生信息管理系统的洗礼,与前几个月刚接触数据库时相比,对它涉及到的知识的理解深刻了许多,其中不是很起眼但又起着重要作用的两个属性——BOF和EOF就是如此。
与它们的第一次谋面是在敲红皮书的时候,但当时对其用法理解扭曲,也没有重视,直到在学生信息管理系统的过程中才发现它倆的重要性。
BOF和EOF是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。
为了理解更明了一些,画了一张图(如右图)来解释EOF和BOF,假设记录集中一共有n条记录,当当前记录指针指向第一条记录之前时,BOF属性值为True;当前记录指向中间1~n任意一条记录时,BOF和EOF属性值
都为False;当前记录指向最后一条记录之后时,EOF
属性值为True。
当然,EOF和BOF合起来也可以实现一些功能,比如:
当判断语句BOF And EOF时,如果结果为True即它们倆的返回值都为True时则表明当前记录集中没有任何记录;而当记录中只有一个记录并处于该记录位置时,BOF和EOF的返回值都为False。