「access vba 全レコード表示」
「access vba 全てのレコードを表示する」
という検索で、このサイト・インストラクターのネタ帳へのアクセスがありました。
この検索キーワードだけでは、どこにすべてのレコードを表示させたいのかがわかりませんので、ここではADO(ActiveX Data Objects)を使ってイミディエイトウィンドウに出力を行う、Access VBA(Visual Basic for Applications)のコードをご紹介しておきます。
すべてのレコードを取得するサンプルプロシージャ
ADODB(Microsoft ActiveX Data Objects)への参照設定が行われていて、「ID」「名前」「住所」というフィールドを持った「tbl_住所録」というテーブルが存在するAccess上で、以下のプロシージャを実行すると、tbl_住所録テーブルの全レコードがイミディエイトウィンドウに出力されます。
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
イミディエイトウィンドウの制限上、実務で使われるようなテーブルの大量のレコードを、イミディエイトウィンドウ上に、すべて表示させることは不可能なことが多いはずですが、ADOを使って全レコードを取得する考え方は参考になるはずです。
サンプルプロシージャの解説
まず、AccessライブラリのCurrentProjectオブジェクトのConnectionプロパティで、
カレントデータベースの、ADODBライブラリのConnectionオブジェクトを取得します。
Set cnn = CurrentProject.Connection
Set cnn = New ADODB.Connection
cnn. ConnectionString = "接続情報"
cnn.Open
といったコードにしてやればいいでしょう。
つづいて、ADODBライブラリのRecordsetクラスのインスタンスを、
作成しておいてから、
Set rst = New ADODB.Recordset
RecordsetオブジェクトのOpenメソッドで、
SQL文と、先に取得したConnectionオブジェクトを使ってレコードセットを開きます。
sql = "SELECT * FROM tbl_住所録 "
rst.Open _
Source:=sql, _
ActiveConnection:=cnn
ここまでが、Access VBAからADOを利用する際に、よく登場する定番のコードです。
今回は全レコードを取得するので、RecordsetオブジェクトのEOFプロパティを使って最後のレコードかどうかを判定することで、
最後レコードに到達するまで、Do~Loop文を回して、
Do Until rst.EOF
ID・名前・住所をイミディエイトウィンドウに出力します。
Debug.Print rst!ID, rst!名前, rst!住所
1件のレコードの出力が終わったら、RecordsetオブジェクトのMoveNextメソッドで、
次のレコードへ移動しています。
rst.MoveNext
Loop
ループを抜けたら、Recordsetオブジェクト・Connectionオブジェクトを破棄する定番の処理です。
rst.Close: Set rst = Nothing
cnn.Close: Set cnn = Nothing
ADODBへの参照設定を行わない場合
VBE(Visual Basic Editor)のメニュー[ツール]-[参照設定]から表示される、[参照設定]ダイアログなどから、
ADODBへの参照設定を行っておくほうが、オブジェクトブラウザーも利用できて、コーディング時にインテリセンスも使えますから便利だと思いますが、参照設定を行わない場合は、変数宣言を、
Dim cnn As Object ' ADODB.Connection
Dim rst As Object ' ADODB.Recordset
に変更して、オブジェクト変数にセットする部分を、CreateObject関数を使って、
Set rst = CreateObject("ADODB.Recordset")
としてください。
- Newer:Dictionaryのカウント・個数を取得するExcelマクロ
- Older:ドライブ一覧を作成するExcelマクロ
Home » Access VBA » Access VBAでADOを使って全レコードを取得する