ADOでデータベースに接続し、Recordsetを使用してカレントレコードを移動させながらフィールドの値を取得する記述 Recordsetで、DoLoopを使用してカレントレコードを移動させつつ ・コレクション 左から4つめのフィールド「city」までのレコードをイミディエイトウィンドウに表示 左から4つめのフィールド「city」までのレコードをイミディエイトウィンドウに表示 読みに行くテーブルの名前にスペースが入っているとデータを取得することができず ※注意※ ▼書式のおさらい▼
今回の記述に関する前情報
何を行うか
指定したテーブルの指定したフィールドのすべての値を取得しイミディエイトウィンドウに表示する
パターン1:カレントプロジェクトの指定のテーブルから取得
パターン2:別のAccessファイルの指定のテーブルから取得記述例における利用パーツ
→FIelds:フィールドの値を取得、フィールドの番号は0から始まる
・ステートメント
→Do Loop
・メソッド
→MoveNext / Open / Close
▼Fieldsコレクションについての解説▼
Fields コレクション - ActiveX Data Objects (ADO) | Microsoft Learn
【実践1】指定のテーブルの指定のフィールドの値を取得する記述例【パターン1】
カレントプロジェクトのデータベースに接続する場合の記述
▼取得対象テーブル「yubin_data」▼
▼記述例▼Sub test_CurrentTable1()
Dim CNT As ADODB.connection
Dim RST As ADODB.Recordset
Set CNT = CurrentProject.connection
Set RST = New ADODB.Recordset
RST.Open "yubin_data", CNT, adOpenStatic
Do Until RST.EOF
Debug.Print RST.Fields(0), RST.Fields(1), RST.Fields(2), RST.Fields(3)
RST.MoveNext
Loop
Debug.Print "------------ココマデ-------------"
RST.Close: CNT.Close
Set RST = Nothing: Set CNT = Nothing '参照を解除、メモリ開放
End Sub
カレントプロジェクト以外のデータベースに接続する場合の記述【パターン2】
▼取得対象テーブル「KEN_ALL_ROME_sub」▼
▼記述例▼Sub test_yubindataSub()
Dim CNT As New ADODB.connection
Dim RST As New ADODB.Recordset
CNT.Open "Provider=Microsoft.ACE.OLEDB.12.0; Data Source= C:\Users\user\tama-shi\ken_all\yubin_data\KEN_ALL.accdb"
Set RST = New ADODB.Recordset
RST.Open "KEN_ALL_ROME_sub", CNT, adOpenStatic
Do Until RST.EOF
Debug.Print RST.Fields(0), RST.Fields(1), RST.Fields(2), RST.Fields(3)
RST.MoveNext
Loop
Debug.Print "------------ココマデ-------------"
RST.Close: CNT.Close
Set RST = Nothing: Set CNT = Nothing '参照を解除、メモリ開放
End Sub
実行後の所感
そのデータベースの一番に位置しているテーブルの内容を取得してしまうことがわかった…
▼実行結果▼
【実践2】実践1の内容をConnectionオブジェクトのExecuteメソッドで行う記述例
その1の記事でも記載したが、RecordsetオブジェクトのOpenメソッドで開く場合とは異なり
ConnectionオブジェクトのExecuteメソッドで開く場合には
前方スクロールカーソル(adOpenFowardOnly)&読み取り専用(adLockReadOnly)となる
tama-shi.hatenadiary.com
▼記述例▼Sub test_CurrentTable2()
Dim CNT As ADODB.connection
Dim RST As ADODB.Recordset
Set CNT= Currentproject.Connection
Set RST = CNT.Execute("yubin_data")
Do Until RST.EOF
Debug.Print RST.Fields(0), RST.Fields(1), RST.Fields(2), RST.Fields(3)
RST.MoveNext
Loop
Debug.Print "------------ココマデ-------------"
RST.Close: CNT.Close
Set RST = Nothing: Set CNT = Nothing '参照を解除、メモリ開放
End Sub