EOF和BOF
EOF和BOF
? ? ? ? ?使用ADO連接數據庫進行查詢的時候,數據庫將查詢結果返回查詢端,在查詢端的內存里面就會有一個列表,這個列表存放的就是查詢的結果。
? ? ? ? ?這個內存中的列表就是數據集。在學生的程序里面mrc就是表示這個數據集。
? ? ? ? ?Dim mrc As ADODB.Recordset
? ? ? ? ?比如
? ? ? ? ?數據集里面有編號為1,2,3,4的4條記錄。
? ? ? ? ?BOF表示當前的指針是指在了數據集的前面,當mrc指向的編號是-1,這樣就會符合了bof的情況。
? ? ? ? ?EOF表示當前的指針是指在了數據集的后面,當mrc的指針指向5,而第五條記錄并不存在,這樣就會產生了eof的情況。
? ? ? ? ?如果同時產生了BOF和EOF的情況,就是說mrc的指針既在上界之外也在下屆之外,這樣只有一種情況,就是mrc所代表的數據集是空的。
? ? ? ? ?我們在做信管和機房的時候,經常會遇到的一個錯誤,如下圖sql語句查詢出來的值是空的,因此數據集也是空的,在讀取rs數據集里面的值的時候就會報這個錯誤。
? ? ? ? ? 使用?if?rs.BOF and?rs.EOF then?這個判斷可以判別mrc里面是否有沒有數據集,如果符合這個條件,說明數據集是空的,在程序中就要繞開對mrc里字段的訪問。?
判斷記錄集是否為空:
If mrc.EOF And mrc.BOF Then
??? MsgBox"對不起,您要查詢的記錄集為空!",vbOKOnly + vbExclamation, "提示"
??? …………
Else
??? x =Trim(mrc.Fields(n))
??? …………
End If
上述的代碼,近似程序:If?mrc.Recordcount?=?0?then
? ? ? ? ?BOF、EOF?屬性??
? ? ? ? ?BOF?指示當前記錄位置位于?Recordset?對象的第一個記錄之前。???
? ? ? ? ?EOF?指示當前記錄位置位于?Recordset?對象的最后一個記錄之后???
? ? ? ? ?BOF、EOF返回值???
? ? ? ? ?BOF?和?EOF?屬性返回布爾型值,說明如下: ??
? ? ? ? 使用?BOF?和?EOF?屬性可確定?Recordset?對象是否包含記錄,或者從一個記錄移動到另一個記錄時是否超出?Recordset?對象的限制。???
? ? ? ? 如果當前記錄位于第一個記錄之前,BOF?屬性將返回?True?(-1),如果當前記錄為第一個記錄或位于其后則將返回?False?(0)。???
? ? ? ? 如果當前記錄位于?Recordset?對象的最后一個記錄之后?EOF?屬性將返回?True,而當前記錄為?Recordset?對象的最后一個記錄或位于其前,則將返回?False。???
如果?BOF?或?EOF?屬性都為?True,則表示當前沒有任何記錄。
第一條和最后一條記錄查詢:
Private Sub firstCommand_Click()
???mrc.MoveFirst
??? CallviewData
End Sub
Private Sub lastCommand_Click()
??? mrc.MoveLast
??? CallviewData
End Sub
上一條和下一條記錄查詢:
Private Sub previousCommand_Click()
???mrc.MovePrevious
??? If mrc.BOFThen
???????mrc.MoveLast
??? End If
??? CallviewData
End Sub
Private Sub nextCommand_Click()
??? mrc.MoveNext
??? If mrc.EOFThen
???????mrc.MoveFirst
??? End If
??? CallviewData
End Sub
? ? ? ? ? 如果記錄集位于第一條記錄之前,即BOF則,記錄集移動到最后一條記錄。
? ? ? ? ? 如果記錄集位于最后一條記錄之后,即EOF則,記錄集移動到第一條記錄。
?
總結