指南針之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 ,然後找到最後一條記錄張連海、男。接下來要刪除了,那麼此時不是直接刪除,而是返回到第一條記錄,也就是白雲、女那條記錄,先做個標記,確保我刪除最後一條連海、男後能順藤摸瓜返回來。在已經做好標記的情況下,返回最後一條記錄然後順利刪除這個信息。這裏刪除最後一條連海這條記錄後,後面沒有記錄了,所以必須做標記……

    刪除除最後一條記錄以外記錄舉例:我要刪除黑土,那麼這個比較簡單,直接指向黑土並做在前面標記,直接刪除就行。因爲刪了黑土還有張三或者白雲記錄……

    這個刪除記錄的過程實質就是漫遊森林的一個過程,茫茫森林,必須要做個標記才不至於迷路;也可以想象成指明燈……

    這就是我對BOF和EOF的理解,我覺得雖然是有些理解了,但是可能還是有錯誤。請大家多提寶貴建議,多多交流……



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章