レコードを移動する

スポンサーリンク
スポンサーリンク

先頭レコード、最終レコードを判定する

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

スポンサーリンク
シェアする
スポンサーリンク
あんとんさんち 覚え書き