這張圖的地位:可別小看這張圖和這兩個詞。這可是簡約而不簡單的。這裏涉及到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。
當然,只是文字和圖片還是有些突兀,有些例子說明就更好了。那就舉我前些天完成的學生信息管理系統來說吧!這些代碼看似簡單,但實質不然,細細的分析並總結過後就會發現很對細節的問題,隨便拿出一個來就夠你研究半天。積累階段應該做些嘗試……就比方這段代碼。
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的理解,我覺得雖然是有些理解了,但是可能還是有錯誤。請大家多提寶貴建議,多多交流……