accessのvbaで特定テーブルの参照の方法
基本は、DAOオブジェクトを準備して、レコード内容を取扱う。
オブジェクト XXX を作成。
Dim XXX As DAO.Recordset
テーブル T_XXX の内容をオブジェクト XXX へセット。
Set XXX = CurrentDb.OpenRecordset("T_XXX", dbOpenTable)
※そもそもテーブル T_XXX で特定年度を指定するなどの処置を
しておきたい場合は、SQL操作を記述し、それを引数とする。(下記例)
SQL = "SELECT * FROM T_XXX"
SQL = SQL & " WHERE 年度 = '2019'"
SQL = SQL & " ORDER BY 年度, 性別, 識別番号;"
Set XXX = CurrentDb.OpenRecordset(SQL)
予めレコードセットオブジェクト XXX が空(レコードなし)か
どうか記録する変数を準備し、
Dim XXX空判定 As Boolean
(対象のテーブルにPrimaryKeyを設定しているとき)
テーブル内容を主キーで並び替え(=index)してやる。
XXX.Index = "PrimaryKey"
※上記SQLによって予め目的の並びに整える場合は、不要。
EOF(EndOfFileプロパティ)を用い、
レコードセットオブジェクト XXX が最初期の段階で
「カレント レコードの位置が
Recordset オブジェクトの最後のレコードより後にあるかどうか」
を取得することで、そもそも XXX はレコードを含むのか否か=空の判定 を判断する。
空でないのなら、MoveFirstによって、レコードの現在位置(ポインター)を
オブジェクトの一番初めのレコード位置 にセットしておく。
If XXX.EOF Then
XXX空判定 = True
Else
XXX空判定 = False
XXX.MoveFirst
End If
対象テーブルの現在参照中レコードが持つ項目値を取得利用するには
XXX!目的の項目名
でOK。
※Recordset.MoveFirst メソッド (DAO) について
https://docs.microsoft.com/ja-jp/office/client-developer/access/desktop-database-reference/recordset-movefirst-method-dao
そもそも1つのレコードしか保持していないようなテーブルが
参照先(システムの設定値など)の場合は、
DFirst("出力設定1", "T_基本設定")
などとすれば、上記のような手順を記述せずとも、
対象テーブルの値を取得することが可能である。
以上