2.7 レコードセットの操作/移動
レコードセットオブジェクト内のレコードを順読みしたり、逆順読みしたりする方法です。

順読みをするときは、レコードセットオブジェクトのMoveNextというメソッド、逆順読みをするときは、レコードセットオブジェクトのMovePreviousというメソッドを実行します。
MoveNextの使用例
まずは、レコードの順読みです。順読みとは、現在読み込まれているレコードの次のレコードを読み込む動作です。順読みを行う場合は、レコードセットオブジェクトのMoveNextメソッドを使います。

順読みを行っていると、いつかは最終レコードに達し読み込みが出来ない状態になりますが、順読みの場合(最終レコードに達している)の検知はレコードセットオブジェクトのEOFプロパティで行います。このプロパティの内容が、Trueならレコード終了(これ以上レコードが無い)、Falseならレコード有り(次のレコード有り)です。

例では、「住所録テーブル」というテーブルをオープンした後、MoveNextでレコードを最後まで順読みしています。

Sub prcMoveNext2000()

    'Access VBA Tips
    '2.7 レコードセットの操作/移動
    'Access2000以降での手順

    Dim daoDB As DAO.Database
    Dim daoRS As DAO.Recordset

    'データベースのオープン(データベースオブジェクトの作成)
    Set daoDB = CurrentDb

    'テーブルのオープン(レコードセットの作成)
    Set daoRS = daoDB.OpenRecordset("住所録テーブル", dbOpenDynaset)

    '最終レコードまで順読み込みを行う
    Do Until daoRS.EOF = True

       'イミディエイトウィンドウへ漢字氏名を表示します
       Debug.Print daoRS("漢字氏名")

       'レコードの順読み
       daoRS.MoveNext

    Loop

    'テーブルのクローズ
    daoRS.Close

    'データベースのクローズ
    daoDB.Close

End Sub
 ※Access2000以降の場合。ただし、DAOを使う場合は参照設定が必要です。



Sub prcMoveNext97()

    'Access VBA Tips
    '2.7 レコードセットの操作/移動
    'Access97までの手順

    Dim daoDB As Database
    Dim daoRS As Recordset

    'データベースのオープン(データベースオブジェクトの作成)
    Set daoDB = DBEngine.Workspaces(0).Databases(0)

    'テーブルのオープン(レコードセットの作成)
    Set daoRS = daoDB.OpenRecordset("住所録テーブル", DB_OPEN_DYNASET)

    '最終レコードまで順読み込みを行う
    Do Until daoRS.EOF = True

       'イミディエイトウィンドウへ漢字氏名を表示します
       Debug.Print daoRS("漢字氏名")

       'レコードの順読み
       daoRS.MoveNext

    Loop

    'テーブルのクローズ
    daoRS.Close

    'データベースのクローズ
    daoDB.Close

End Sub
 ※Access97までの場合。
MovePreviousの使用例
次に、レコードの逆順読みです。逆順読みとは、現在読み込まれているレコードの1つ前のレコードを読み込む動作です。逆順読みを行う場合は、レコードセットオブジェクトのMovePreviousメソッドを使います。

逆順読みを行っていると、いつかは先頭レコードに達し読み込みが出来ない状態になりますが、逆順読みの場合(先頭レコードに達している)の検知はレコードセットオブジェクトのBOFプロパティで行います。このプロパティの内容が、Trueならレコード終了(これ以前のレコードが無い)、Falseならレコード有り(1つ前のレコード有り)です。

例では、「住所録テーブル」というテーブルをオープンした後、MoveLastメソッドで最終レコードへ移動し、その後MovePreviousでレコードを先頭まで逆順読みしています。

Sub prcMovePrevious2000()

    'Access VBA Tips
    '2.7 レコードセットの操作/移動
    'Access2000以降での手順

    Dim daoDB As DAO.Database
    Dim daoRS As DAO.Recordset

    'データベースのオープン(データベースオブジェクトの作成)
    Set daoDB = CurrentDb

    'テーブルのオープン(レコードセットの作成)
    Set daoRS = daoDB.OpenRecordset("住所録テーブル", dbOpenDynaset)

    '最終レコードへ移動
    daoRS.MoveLast

    '先頭レコードまで逆順読み込みを行う
    Do Until daoRS.BOF = True

       'イミディエイトウィンドウへ漢字氏名を表示します
       Debug.Print daoRS("漢字氏名")

       'レコードの逆順読み
       daoRS.MovePrevious

    Loop

    'テーブルのクローズ
    daoRS.Close

    'データベースのクローズ
    daoDB.Close

End Sub
 ※Access2000以降の場合。ただし、DAOを使う場合は参照設定が必要です。



Sub prcMovePrevious97()

    'Access VBA Tips
    '2.7 レコードセットの操作/移動
    'Access97までの手順

    Dim daoDB As Database
    Dim daoRS As Recordset

    'データベースのオープン(データベースオブジェクトの作成)
    Set daoDB = DBEngine.Workspaces(0).Databases(0)

    'テーブルのオープン(レコードセットの作成)
    Set daoRS = daoDB.OpenRecordset("住所録テーブル", DB_OPEN_DYNASET)

    '最終レコードへ移動
    daoRS.MoveLast

    '先頭レコードまで逆順読み込みを行う
    Do Until daoRS.BOF = True

       'イミディエイトウィンドウへ漢字氏名を表示します
       Debug.Print daoRS("漢字氏名")

       'レコードの逆順読み
       daoRS.MovePrevious

    Loop

    'テーブルのクローズ
    daoRS.Close

    'データベースのクローズ
    daoDB.Close

End Sub
 ※Access97までの場合。
Copyright(C) 1999-2006 結城圭介。 All rights reserved