在這些天敲寫和調試學生資訊管理系統的時候,經常會用到EOF(Endof File)和BOF(Before of File),稍加不注意查詢我們的資料庫就會出錯,那麼這倆到底是何方神聖,是怎麼用的,之間又有什麼區別呢?
一、認識
BOF:指目前記錄位置位於Recordset對象的第一個記錄之前
EOF:指目前記錄位置位於Recordset對象的最後一個記錄之後
這兩個的屬性值均返回布爾型:True和False,使用BOF
和 EOF 屬性可確定 Recordset 對象是否包含記錄,或者從一個記錄移動到另一個記錄時是否超出 Recordset 對象的限制。 下表即是各自的使用說明及查詢結果:
|
EOF |
BOF |
True |
當前行的位置是在最後一行的後面,無記錄 |
當前行的位置是在第一行之前,無記錄 |
False |
當前行的位置是在最後一行或其前面,有記錄 |
當前位置是在第一行或其後,有記錄 |
說明:
(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,直到重新安排目前記錄。
而在我們的學生資訊管理系統中,會涉及到對指標進行的MoveFirst、MoveLast、MovePrevious與MoveNext四種方法。一般來說,當需要對記錄集Recordset中的所有行進行操作時,代碼可以使用MoveNext,迴圈遍曆各行,直到EOF屬性被置為True
如果當 EOF 被置為 True 時再使用 MoveNext ,或當 BOF被置為 True 時再使用 MovePrevious ,都將產生一個提示代號為‘3021’的錯誤。
需要注意的是:允許一個Move 方法並非意味著,該方法能成功地定位某行。它僅表示執行這個指定的 Move 方法是允許的,並且不產生一個錯誤。 BOF 和 EOF屬性的狀態可以隨著該移動的結果而改變。
二、用法
If objRs.BOF Then
表示:當前指標的位置是在第一行記錄之前,則...
If objRs.EOF Then
表示:當前指標的位置是在最後一行記錄之後,則...
If Not objRs.EOF Then
表示:當前指標的位置沒有到達最後一條記錄
If Not objRs.BOF then
表示:當前指標的位置沒有到達第一條記錄
推薦使用下面兩條
If Not (objRs.BOF AND objRs.EOF) Then
表示:指標位於RecordSet 的當中(並非是最後一條和第一條) ,說明一定有記錄。
If objRs.BOF AND objRs.EOF Then
表示:沒有任何記錄