HOME > VBA 基礎 >このページ
Recordsetオブジェクト内の移動(DAO編)

■Contents

01 レコード移動
02 BOF、EOFプロパティ
03 Recordsetオブジェクトのレコード数

01.レコード移動

 以下のMove系のメソッドを利用して、レコードセット内で移動できます。移動方向に応じて次の5種類のメソッドを利用します。
【書式】
    recordset.MoveFirst     (先頭レコードへ)
       recordset.MovePrevious  (1つ前のレコードへ)
       recordset.MoveNext    (次のレコードへ)
       recordset.MoveLast      (最終レコードへ)
    recordset.Move[n]   (指定したレコード番号を基準にして前後に移動)

 recordset:開くRecordsetオブジェクトを表すオブジェクト変数を指定
@テーブルタイプ、ダイナセットタイプ、スナップショットタイプのRecordsetオブジェクトでは、これらすべてのメソッドを
 利用できます。
A前方スクロールタイプのRecordsetオブジェクトでは、MoveNextメソッドとMoveメソッドのみを使うことができます。
 ただし、Moveメソッドを使うときはレコード番号を指定する引数正数を指定します。


02.BOF、EOF プロパティ

 BOF プロパティ -はカレント レコードの位置が、Recordset オブジェクトの最初のレコードよりも前にあるかどうかを示す値を返し、EOF プロパティ -はカレント レコードの位置が Recordset オブジェクトの最後のレコードよりも後にあるかどうかを示す値を返します。戻り値は、ともにブール型 の値です。
@BOF プロパティは、カレント レコードの位置が最初のレコードよりも前にある場合は
True に設定され、
 カレント レコードの位置が最初のレコードか、それより後にある場合は False に設定されます。

AEOF プロパティは、カレント レコードの位置が最後のレコードの位置よりも後にある場合は
True に設定され、
カレント レコードの位置が最後のレコードか、それより前にある場合は False に設定されます。

Bレコードを 1 つも持たない Recordset オブジェクトを開くと、BOF プロパティと EOF プロパティが共に 
True に設定されます。

Cレコードを持つ Recordset オブジェクトを開くと、最初のレコードがカレント レコードになり、
BOF プロパティと EOF プロパティの設定値は False になります。この場合、MovePrevious メソッドを
使用して、Recordset オブジェクトの先頭を超えるまでは、BOF プロパティの設定値は False のままです。
同様に、MoveNext メソッドを使用して Recordset オブジェクトの最後を超えるまでは、
EOF プロパティの設定値は False のままです。

Dレコードを持つ Recordset オブジェクトに MoveLast メソッドを使用すると、最後のレコードがカレント
 レコードになります。そこで MoveNext メソッドを使用すると、EOF プロパティは True に設定されます。

Eレコードを持つ Recordset オブジェクトに MoveFirst メソッドを使用すると、最初のレコードがカレント
 レコードになります。そこで MovePrevious メソッドを使用すると、BOF プロパティは True に設定されます。
 Recordset オブジェクトに含まれるすべてのレコードに対して操作を行う場合、通常は、EOF プロパティの値が True になるまで、MoveNext メソッドを使用してレコード全体をループ処理します。
【サンプルコード】次の例はEOFプロパティを利用してファイルの最初から最後まで一巡したのち、最後から先頭に向かって一巡しています。
Sub レコード移動()
  Dim DB As DAO.Database
  Dim RS As DAO.Recordset

  Set DB = CurrentDb
  Set RS = DB.OpenRecordset("T_名簿")
  
  '最終レコードまで実行します
  Do Until RS.EOF
    '
    'レコード操作
    '
    RS.MoveNext  '次のレコードに移動します
  Loop
  
  RS.MoveLast
  
  '先頭レコードまで実行します
  Do Until RS.BOF

    '
    'レコード操作
    '
    RS.MovePrevious    '前のレコードに移動します
  Loop

 Set RS = Nothing
 Set DB = Nothing

End Sub



03.Recordsetオブジェクトのレコード数

@ RecordCountプロパティはテーブルタイプのRecordsetオブジェクト内のレコード数を表します。
A ダイナセットあるいはスナップショットタイプのRecordsetオブジェクト内のアクセスされたレコード総数を表します。
 したがって、少なくとも1件のレコードがある場合、RecordCountオブジェクトを作成した直後のRecordCountプロパ
 ティは1です。実際のレコード数をカウントするにはMoveLastメソッドを利用します(サンプルコード参照)
B レコードが1件も無いRecordsetオブジェクトのRecordCountプロパティは0になります。

【サンプルコード】
Sub レコード数のカウント()
    Dim DB As DAO.Database
    Dim RS As DAO.Recordset
    
    Set DB = CurrentDb
    Set RS = DB.OpenRecordset("Q_名簿", dbOpenDynaset)

    If RS.EOF Then
       RS.Close
       Debug.Print "レコード件数は0です。"
       Exit Sub
    Else
       Debug.Print RS.RecordCount  '1が表示されます

       RS.MoveLast
       Debug.Print RS.RecordCount  '実際のレコード数が表示されます
       RS.Close
    End If
    
End Sub

ホームページに|前のページに|次のページに

CopyRight(C) 2004 cbcnet. All Rights Reserved