たま氏の覚え書き

KNIME・AccessVBA・Swift等、学習したことを覚え書き

AccessVBA_ADOの利用_レコード操作その2【Recordset】【Move】カレントレコードの移動・レコードの値の取得

ADOでデータベースに接続し、Recordsetを使用してカレントレコードを移動させながらフィールドの値を取得する記述

今回の記述に関する前情報

何を行うか

Recordsetで、DoLoopを使用してカレントレコードを移動させつつ
指定したテーブルの指定したフィールドのすべての値を取得しイミディエイトウィンドウに表示する

パターン1:カレントプロジェクトの指定のテーブルから取得
パターン2:別のAccessファイルの指定のテーブルから取得

記述例における利用パーツ

・コレクション
  →FIelds:フィールドの値を取得、フィールドの番号は0から始まる
ステートメント
  →Do Loop
・メソッド
  →MoveNext / Open / Close


▼Fieldsコレクションについての解説▼
Fields コレクション - ActiveX Data Objects (ADO) | Microsoft Learn

【実践1】指定のテーブルの指定のフィールドの値を取得する記述例【パターン1】

カレントプロジェクトのデータベースに接続する場合の記述

左から4つめのフィールド「city」までのレコードをイミディエイトウィンドウに表示

▼取得対象テーブル「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】

左から4つめのフィールド「city」までのレコードをイミディエイトウィンドウに表示

▼取得対象テーブル「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