Home » Access VBA » Access VBAでADOを使って全レコードを取得する

Access VBAでADOを使って全レコードを取得する

動作検証バージョン:Access2016

「access vba 全レコード表示」
「access vba 全てのレコードを表示する」
という検索で、このサイト・インストラクターのネタ帳へのアクセスがありました。

この検索キーワードだけでは、どこにすべてのレコードを表示させたいのかがわかりませんので、ここではADO(ActiveX Data Objects)を使ってイミディエイトウィンドウに出力を行う、Access VBA(Visual Basic for Applications)のコードをご紹介しておきます。

[スポンサードリンク]

すべてのレコードを取得するサンプルプロシージャ

ADODB(Microsoft ActiveX Data Objects)への参照設定が行われていて、「ID」「名前」「住所」というフィールドを持った「tbl_住所録」というテーブルが存在するAccess上で、以下のプロシージャを実行すると、tbl_住所録テーブルの全レコードがイミディエイトウィンドウに出力されます。

Sub ADOでカレントDBのテーブルから全レコードを取得する()

 Dim cnn As ADODB.Connection
 Dim rst As ADODB.Recordset
 Dim sql As String

 Set cnn = CurrentProject.Connection
 Set rst = New ADODB.Recordset

 sql = "SELECT * FROM tbl_住所録 "
 rst.Open _
   Source:=sql, _
   ActiveConnection:=cnn

 Do Until rst.EOF
  Debug.Print rst!ID, rst!名前, rst!住所
  rst.MoveNext
 Loop

 rst.Close: Set rst = Nothing
 cnn.Close: Set cnn = Nothing

End Sub

イミディエイトウィンドウの制限上、実務で使われるようなテーブルの大量のレコードを、イミディエイトウィンドウ上に、すべて表示させることは不可能なことが多いはずですが、ADOを使って全レコードを取得する考え方は参考になるはずです。

サンプルプロシージャの解説

まず、AccessライブラリのCurrentProjectオブジェクトのConnectionプロパティで、

Access VBAでADOを使って全レコードを取得する

カレントデータベースの、ADODBライブラリのConnectionオブジェクトを取得します。
  Set cnn = CurrentProject.Connection

ちなみに、カレントデータベースでない場合は、

  Set cnn = New ADODB.Connection

  cnn. ConnectionString = "接続情報"

  cnn.Open

といったコードにしてやればいいでしょう。

つづいて、ADODBライブラリのRecordsetクラスのインスタンスを、

Access VBAでADOを使って全レコードを取得する

作成しておいてから、
  Set rst = New ADODB.Recordset

RecordsetオブジェクトのOpenメソッドで、

Access VBAでADOを使って全レコードを取得する

SQL文と、先に取得したConnectionオブジェクトを使ってレコードセットを開きます。
  sql = "SELECT * FROM tbl_住所録 "
  rst.Open _
    Source:=sql, _
    ActiveConnection:=cnn

ここまでが、Access VBAからADOを利用する際に、よく登場する定番のコードです。

今回は全レコードを取得するので、RecordsetオブジェクトのEOFプロパティを使って最後のレコードかどうかを判定することで、

Access VBAでADOを使って全レコードを取得する

最後レコードに到達するまで、Do~Loop文を回して、
  Do Until rst.EOF

ID・名前・住所をイミディエイトウィンドウに出力します。
   Debug.Print rst!ID, rst!名前, rst!住所

1件のレコードの出力が終わったら、RecordsetオブジェクトのMoveNextメソッドで、

Access VBAでADOを使って全レコードを取得する

次のレコードへ移動しています。
   rst.MoveNext
  Loop

ループを抜けたら、Recordsetオブジェクト・Connectionオブジェクトを破棄する定番の処理です。
  rst.Close: Set rst = Nothing
  cnn.Close: Set cnn = Nothing

ADODBへの参照設定を行わない場合

VBE(Visual Basic Editor)のメニュー[ツール]-[参照設定]から表示される、[参照設定]ダイアログなどから、

Access VBAでADOを使って全レコードを取得する

ADODBへの参照設定を行っておくほうが、オブジェクトブラウザーも利用できて、コーディング時にインテリセンスも使えますから便利だと思いますが、参照設定を行わない場合は、変数宣言を、
  Dim cnn As Object ' ADODB.Connection
  Dim rst As Object ' ADODB.Recordset
に変更して、オブジェクト変数にセットする部分を、CreateObject関数を使って、
  Set rst = CreateObject("ADODB.Recordset")
としてください。

[スポンサードリンク]

Home » Access VBA » Access VBAでADOを使って全レコードを取得する

「Access VBA」の記事一覧

検索


Copyright © インストラクターのネタ帳 All Rights Reserved.

.