此頁(yè)沒(méi)有內(nèi)容條目
內(nèi)容

BOF、EOF 和 Bookmark 屬性范例

該范例使用 BOFEOF 屬性,在用戶試圖移過(guò) Recordset 的第一個(gè)和最后一個(gè)記錄時(shí)顯示一條信息。它通過(guò) Bookmark 屬性使用戶對(duì) Recordset 中的記錄進(jìn)行標(biāo)記,稍后再返回給它。

Public Sub BOFX()

   Dim rstPublishers As ADODB.Recordset

   Dim strCnn As String

   Dim strMessage As String

   Dim intCommand As Integer

   Dim varBookmark As Variant

   ' 使用來(lái)自出版商表的數(shù)據(jù)打開(kāi)記錄集。

   strCnn = "Provider=sqloledb;" & _

      "Data Source=srv;Initial Catalog=pubs;User Id=sa;Password=; "

   Set rstPublishers = New ADODB.Recordset

   rstPublishers.CursorType = adOpenStatic

   ' 使用客戶端游標(biāo)啟用 AbsolutePosition 屬性。

   rstPublishers.CursorLocation = adUseClient

   rstPublishers.Open "SELECT pub_id, pub_name FROM publishers " & _

      "ORDER BY pub_name", strCnn, , , adCmdText

   rstPublishers.MoveFirst

   Do While True

      ' 顯示關(guān)于當(dāng)前記錄的信息并讓用戶輸入。

      strMessage = "Publisher: " & rstPublishers!pub_name & _

         vbCr & "(record " & rstPublishers.AbsolutePosition & _

         " of " & rstPublishers.RecordCount & ")" & vbCr & vbCr & _

         "Enter command:" & vbCr & _

         "[1 - next / 2 - previous /" & vbCr & _

         "3 - set bookmark / 4 - go to bookmark]"

      intCommand = Val(InputBox(strMessage))

      Select Case intCommand

         ' 向前或向后移動(dòng),捕獲 BOF 或 EOF。

         Case 1

            rstPublishers.MoveNext

            If rstPublishers.EOF Then

               MsgBox "Moving past the last record." & _

                  vbCr & "Try again."

               rstPublishers.MoveLast

            End If

         Case 2

            rstPublishers.MovePrevious

            If rstPublishers.BOF Then

               MsgBox "Moving past the first record." & _

                  vbCr & "Try again."

               rstPublishers.MoveFirst

            End If

         ' 保存當(dāng)前記錄的書(shū)簽。

         Case 3

            varBookmark = rstPublishers.Bookmark

         ' 轉(zhuǎn)到由存儲(chǔ)的書(shū)簽所指示的記錄。

         Case 4

            If IsEmpty(varBookmark) Then

               MsgBox "No Bookmark set!"

            Else

               rstPublishers.Bookmark = varBookmark

            End If

         Case Else

            Exit Do

      End Select

   Loop

   rstPublishers.Close

End Sub

該范例使用 Bookmark Filter 屬性創(chuàng)建記錄集的限定視圖,將只允許訪問(wèn)書(shū)簽數(shù)組所引用的記錄。

Public Sub BOFX2()

Dim rs As New ADODB.Recordset

Dim bmk(10)

rs.CursorLocation = adUseClient

rs.ActiveConnection = "Provider=sqloledb;" & _

      "Data Source=srv;Initial Catalog=pubs;User Id=sa;Password=;"

rs.Open "select * from authors", , adOpenStatic, adLockBatchOptimistic

Debug.Print "Number of records before filtering: ", rs.RecordCount

ii = 0

While rs.EOF <> True And ii < 11

    bmk(ii) = rs.Bookmark

    ii = ii + 1

    rs.Move 2

Wend

rs.Filter = bmk

Debug.Print "Number of records after filtering: ", rs.RecordCount

rs.MoveFirst

While rs.EOF <> True

    Debug.Print rs.AbsolutePosition, rs("au_lname")

    rs.MoveNext

Wend

   

End Sub