Microsoft Access Club >ADO入門講座 >このページ >次頁 < 前項  サイト内検索
 

BOFプロパティ、EOFプロパティの活用 : ADO入門講座



DAOのRecordsetオブジェクトと同じく、ADOのRecordsetオブジェクトにもBOF プロパティ(Begin Of Fileの略)とEOF(End Of Fileの略)のプロパティが用意されています。
これらのプロパティは、レコードセットの移動範囲の中で境界を越えていないかどうかを調べるプロパティです。

解説

以下に述べる特徴があります。

  1. カレントレコードが最初のレコードより更に前に移動した場合、BOFプロパティはTrueの状態になります。
  2. カレントレコードが最後のレコードより更に後ろに移動した場合、EOFプロパティはTrueの状態になります。
    • BOF または EOFプロパティがTrueの状態である場合、カレントレコードは存在しないことになります。
  3. レコードを持たないRecordsetを開くと、BOFプロパティと EOFプロパティはTrueの状態に設定されます。
    • 少なくとも 1 つのレコードが格納された Recordsetオブジェクトを開くと、最初のレコードがカレントレコードになり、BOFプロパティとEOFプロパティはFalseの状態になります。
  4. Recordsetオブジェクトで最後に残ったレコードを削除しても、カレントレコードの位置を移動するまでBOFおよびEOFプロパティはFalseの状態のままです。

MoveFirst、MoveLast MovePrevious、
Move < 0

Move 0
MoveNext、
Move > 0
BOF=True、
EOF=False
使用可能 エラー エラー 使用可能
BOF=False、
EOF=True
使用可能 使用可能 エラー エラー
両方が True エラー エラー エラー エラー
両方が False 使用可能 使用可能 使用可能 使用可能
BOF、EOFプロパティ関連図
枠外 BOFプロパティ=True
EOFプロパティ=False
最初のレコード BOFプロパティ=False
EOFプロパティ=False



最後のレコード
枠外 BOFプロパティ=False
EOFプロパティ=True
戻り値
  • BOF および EOFプロパティは、ブール型 (Boolean) の値を返します。

サンプルプロシージャ

一般的な利用方法は、Do Until 〜 Loop 内に用いる方法です。以下のプロシージャは、先頭のカレントレコードからEOFプロパティがFalseになるまで、つまり全てのレコードを対象にする意味です。

Sub ADORecordsetSupport()

    Dim cn As ADODB.Connection
    Dim rs As ADODB.Recordset
    Set cn = CurrentProject.Connection
    Set rs = New ADODB.Recordset
    
    rs.Open "T_売り上げ管理", cn, adOpenKeyset, adLockOptimistic
    
    Do Until rs.EOF ' --- A
        Debug.Print rs!売上日, rs!社員名, rs!性別, Fix(rs!売上額 * 1.05)
        rs.MoveNext ' --- B
    Loop
    
    rs.Close: Set rs = Nothing
    cn.Close: Set cn = Nothing

End Sub
解説
  1. EOFプロパティは、最後のレコードより更に後ろに移動するとFalse値になります。
    よって、Do Until rs.EOF とは、最初のレコードから最後のレコードまで、という意味です。

  2. MoveNextメソッドを用いて、次のレコードに移動します。

実行結果

イミディエイト画面に以下のデータが表示されます。
(ADORecordsetEOFはイミディエイト画面上でプロシージャを実行するためのプロシージャ名です)

補足

EOFプロパティをBOFプロパティに置き換えることもできます。以下のプロシージャをご覧下さい。赤線部分が変更点です。

Sub ADORecordsetBOF()

    Dim cn As ADODB.Connection
    Dim rs As ADODB.Recordset
    Set cn = CurrentProject.Connection
    Set rs = New ADODB.Recordset
    
    rs.Open "T_売り上げ管理", cn, adOpenKeyset, adLockOptimistic
    
    rs.MoveLast ' --- A
    Do Until rs.BOF ' --- B
        Debug.Print rs!売上日, rs!社員名, rs!性別, rs!売上額
        rs.MovePrevious ' --- C
    Loop
    
    rs.Close: Set rs = Nothing
    cn.Close: Set cn = Nothing

End Sub
解説
  1. MoveLastメソッドを用いて、一番最後のレコードにカレントレコードを移動します。

  2. BOFプロパティは、最初のレコードより更に前に移動するとFalse値になります。
    よって、Do Until rs.BOF とは、最後のレコードから最初のレコードまで、という意味です。

  3. MovePreviousメソッドを用いて、前に位置するレコードに移動します。

実行結果

イミディエイト画面に以下のデータが表示されます。
(ADORecordsetBOFはイミディエイト画面上でプロシージャを実行するためのプロシージャ名です)

留意点

BOFプロパティ、またはEOFプロパティがTrue値に切り替わると、カレントレコードは未定義の状態になります。この状態のときに、カレントレコードの値を求めようとすると、下記のエラーメッセージが表示されてしまいますので留意して下さい。

関連ページ

2004/09/06

ページの先頭へ 前ページへ戻る


BOFプロパティ、EOFプロパティの活用 : ADO入門講座


 

-Microsoft Access Club-

年額2,400円でドメインネームサーバーをご用意します。自宅サーバ構築時にご利用下さい。自宅サーバーは応用範囲が広いです。
年額2,400円でドメインネームサーバー。
自社・自宅サーバ構築時にご利用下さい。
やはり、自前サーバーは応用範囲が広いです。