ray88’s diary

お仕事で困ったとき用の自分用の覚書

ADO Recordsetオブジェクトにレコードセットを取得する

■方法①:RecordsetオブジェクトのOpenメソッドで開く
【書式】

RS.Open ソース,CN,カーソルタイプ,ロックタイプ

※変数宣言の際に以下の様に記述するとインスタンス生成を同時に行える

Dim RS As New ADODB.Recordset
引数 説明
ソース テーブル名、クエリ名、SQLステートメントなどを指定
CN Connection,オブジェクトを指定
カーソルタイプ カーソルタイプを指定。CursorTypeプロパティの定数を指定する
ロックタイプ ロックタイプを指定。LockTypeプロパティの定数を指定する

(例)

Sub Test1()
    Dim CN As ADODB.Connection
    Dim RS As ADODB.Recordset
    Set CN = CurrentProject.Connection
    Set RS = New ADODB.Recordset
    RS.Open "T社員名簿", CN, adOpenStatic
    RS.MoveLast
    Do Until RS.BOF
        Debug.Print RS.Fields(0), _
                    RS.Fields(1), _
                    RS.Fields(2)
        RS.MovePrevious
    Loop
    RS.Close: CN.Close
    Set RS = Nothing: Set CN = Nothing
End Sub

■方法②:ConnectionオブジェクトのExcuteメソッドを使用する

Dim RS As ADODB.Recordset
Set RS = CN.Execute(コマンド)
オブジェクト 説明
CN Connectionオブジェクトを指定
引数 説明
コマンド テーブル名、クエリ名、SQLステートメントなど指定

※ConnectionオブジェクトのExecuteメソッドの結果をRecordsetオブジェクトで取得した場合、レコードセットは常に前方スクロールカーソルの読み取り専用となる。

※Executeメソッドでアクションクエリを実行した際にレコードセットが返らない場合、指定したアクションが実行される。
その場合、レコードセットのオブジェクト変数は使用せず以下の様に記述する。

CN.Execute コマンド

(例)

Sub Test2()
    Dim CN As ADODB.Connection
    Dim RS As ADODB.Recordset
    Set CN = CurrentProject.Connection
    Set RS = CN.Execute("T社員名簿")
    Do Until RS.EOF
        Debug.Print RS.Fields(0), _
                    RS.Fields(1), _
                    RS.Fields(2)
        RS.MoveNext
    Loop
    RS.Close: CN.Close
    Set RS = Nothing: Set CN = Nothing
End Sub