簡単にまとめると、レコードセットを取得し、Do Untilステートメントで、レコードの終端になるまでの間、フィールドの値を取り出して、イミディエイト ウィンドウに表示し、次のレコードに進む、という処理を繰り返しています。
*レコードセットとは、レコードの集まりだとイメージしてください。
それでは前回のプログラムを、詳しく見てみましょう。
Sub dispData()
Dim db As DAO.Database
Set db = CurrentDb
Dim rs As DAO.Recordset
Set rs = db.OpenRecordset("T01Prefecture")
Do Until rs.EOF
Debug.Print rs.Fields("PREF_CD") & " " & rs.Fields("PREF_NAME")
'Debug.Print rs!PREF_CD & " " & rs!PREF_NAME
rs.MoveNext
Loop
rs.Close
Set rs = Nothing
db.Close
Set db = Nothing
End Sub
【解説】
(1)コメント化について
VBAでは行の先頭に、半角の「'」シングルクォーテーションを付けると、その行はコメントとなります。コメントはプログラムとして解釈されないので、動作に影響を与えません。
'Debug.Print rs!PREF_CD & " " & rs!PREF_NAME
コメントは、プログラムを一時的に機能しないようにしたり、注釈として説明を加えたりする場合に使われます。
(2)レコードセットオブジェクト型の変数を宣言している部分です。
Dim rs As DAO.Recordset
(3)レコードセットを開いている部分です。
Set rs = db.OpenRecordset("T01Prefecture")
*OpenRecordset()の引数には、テーブル名、クエリー名、SQL文が指定できます。
例
・クエリを指定する場合
Set rs = db.OpenRecordset("Q03Prefecture")
・SQL文を指定する場合
Set rs = db.OpenRecordset("SELECT * FROM T01Prefecture")
クエリ「Q03Prefecture」は Microsoft Access初心者入門講座 の手順で進めてきた場合に表示できます。
SQL文については Access SQL初心者入門講座 で詳しく説明しています。
(4)指定した条件になるまで、処理を繰り返している部分です。
Do Until rs.EOF
繰り返す処理
Loop
EOF(End Of File)は、レコードの終端を表す記号です。つまりレコードが無くなるまで、処理を繰り返します。
(5)カレントレコードのフィールドの値を取得して、イミディエイト ウィンドウに表示している部分です。どちらでも同じ結果になります。
Debug.Print rs.Fields("PREF_CD") & " " & rs.Fields("PREF_NAME")
Debug.Print rs!PREF_CD & " " & rs!PREF_NAME
書籍によって書き方が違うので、両方覚えておくとよいでしょう。
(6)カレントレコードとは現在のレコードのことで、Recordsetオブジェクトの位置は、最初は1行目にあります。
以下の図のようなイメージです。
(7)Recordsetオブジェクトの位置を、次のレコードに移動している部分です。
rs.MoveNext
以下の図のようなイメージです。
他にもいろいろ用意されています。
・Move 1 レコードを1つ進める
・Move -1 レコードを1つ戻る
・MoveFirst 最初のレコードに移動
・MoveLast 最後のレコードに移動
・MoveNext 次のレコードに移動
・MovePrevious 前のレコードに移動
(8)レコードセットを閉じている部分です。
rs.Close
*レコードセットは、必ずデータベースの前に閉じます。
(9)オブジェクトの関連付けを無効にしている部分です。
Set rs = Nothing