先頭レコード、最終レコードを判定する
Sub レコード移動3() '先頭レコード、最終レコードを判定する Dim myCon As New ADODB.Connection, myRS As New ADODB.Recordset Dim FileName As String FileName = ThisWorkbook.Path & "\mdb\2-sampleDB.mdb" myCon.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & FileName myRS.Open "社員", myCon, adOpenStatic, adLockReadOnly '先頭レコードから4件後方に移動させたレコードに移動 myRS.Move -4, adBookmarkFirst Debug.Print "先頭から -4 件目のBOF = " & myRS.BOF & " : EOF = " & myRS.EOF '先頭レコードから2件前方に移動させたレコードに移動 myRS.Move 2, adBookmarkFirst Debug.Print "先頭から 2 件目のBOF = " & myRS.BOF & " : EOF = " & myRS.EOF '先頭レコードから15件前方に移動させたレコードに移動 myRS.Move 15, adBookmarkFirst Debug.Print "先頭から 15 件目のBOF = " & myRS.BOF & " : EOF = " & myRS.EOF myRS.Close: Set myRS = Nothing myCon.Close: Set myCon = Nothing End Sub
「社員」テーブル
実行結果
プロパティ | 内容 |
---|---|
BOF | カレントレコードの位置が Recordsetオブジェクトの最初のレコードより前にあると「True」を返す |
EOF | カレントレコードの位置が Recordsetオブジェクトの最後のレコードより後にあると「True」を返す |
レコードセットのイメージ
Move メソッド や MoveNext メソッド、MovePrevious
メソッドで、先頭または最終レコード超えたレコードを選択するステートメントは、エラーにならない。
ただし、それらのレコードに対して値を取得するなどの処理を行おうとすると、その時点でエラーが発生する。
これは、レコードセットを次のようなイメージで扱っているためである。
BOF |
---|
先頭レコード |
・ ・ ・ |
最終レコード |
EOF |
先頭レコードより前のレコードを選択しようとした時には、それはすべて「BOF」な状態のレコードを選択しようとしているとみなされ、最終レコードより後ろのレコードを選択しようとした時には、それはすべて「EOF」な状態のレコードを選択しようとしているとみなされる。
従って以下のステートメントは両方とも「BOF」なレコードを選択しようとしているステートメントとして解釈される。
myRS.Move -1, adBookmarkFirst
myRS.Move -100, adBookmarkFirst