理工系研究者のための Mac OS X, Windows, Linux メモ
 
ホーム >> Windows関連 >> DAO
このエントリーをはてなブックマークに追加

DAO

作成日:2013.6.23
  1. DAOについて
  2. Recordsetについて
  3. レコードの値を読み取る
  4. レコードを追加する
  5. レコードを修正する
  6. レコードを削除する

DAOについて

DAOはData Access Objectsの略で,Microsoft Accessで作成したデータベースにアクセスするためのプログラミングインターフェースを集めたもの。VBAから利用することができる。このページでは,Access VBAからデータベースにDAOを使ってアクセスする方法について紹介する。

Recordsetについて

Recordsetオブジェクトとは,データベースのテーブル全体またはSQLの実行によって得られた結果を表すオブジェクト。結果が複数のレコードから成る場合には,その中の一つをカレントレコードとして指し示している。指し示しているポインタを前後に動かすことで,結果からデータを取り出すことができる。

テーブル全体のRecordsetを得るには,

Dim rs As DAO.Recordset
Set rs=CurrentDb.OpenRecordset("テーブル名",dbOpenTable)
とする。ここでCurrentDbとは,現在開いていて対象と成っているAccessのデータベースのオブジェクトである。

第1引数にはテーブル名を示したが,ここにSQLスクリプトを入れればそのクエリを実行した結果のRecordsetが得られる。例えば,

Dim sql As String
sql="SELECT family_name,age FROM employee WHERE age<50"
Set rs=CurrentDb.OpenRecordset(sql,dbOpenSnapshot)
とすることもできる。

第2引数はRecordsetのタイプを表すオプションになっていて,よく使うものだけ以下の表で紹介する。

オプション用途・意味
dbOpenTableテーブルのRecordsetオブジェクトを開くときに指定する。テーブルに対して,追加,修正,削除ができるので,既存のテーブルを編集するときに用いる。
dbOpenDynasetクエリの実行結果からなるRecordsetオブジェクトを開くときに指定する。レコードの追加,編集,削除も可能で,編集を加えると,元のテーブルが変更される。
dbOpenSnapshotクエリの実行結果からなるRecordsetオブジェクトを開くときに指定する。レコードの編集はできず,データの読み取りに用いる。

レコードの値を読み取る

Recordsetが得られると,そのRecordsetは結果に含まれる複数のレコードの最初のレコードを指している。各フィールド値は,

Set rs=CurrentDb.OpenRecordset("テーブル",dbOpenSnapshot)
familyName=rs.Fields("family_name").Value
age=rs.Fields("age").Value
として得ることができる。FieldsやValueは省略することもできて,
familyName=rs("family_name")
age=rs("age")
と書くこともできる。

次のレコードに移動するには,MoveNextメソッドを用いる。その他の移動メソッドもまとめると,

メソッド意味
MoveNext次のレコード
MovePrevious前のレコード
MoveFirst最初のレコード
MoveLast最後のレコード
Move N現在の位置からN番目のレコード

レコードの終端(最後のレコードの次の位置)まで移動すると,rs.EOFがTRUEとなる。

Do Until rs.EOF
  Debug.Print rs("family_name")
  rs.MoveNext
Loop

レコードを追加する

レコードを追加するには,テーブルのRecordsetを取得して,AddNewメソッド,Updateメソッドを実行する。

With rs
  .AddNew
  .fields("first_name") = "陽子"
  .fields("family_name") = "宇宙"
  .fields("age") = 40
  .Update
End With
オートナンバーのidフィールドがある場合には,自動的に番号が振られる。 AddNewメソッドを実行すると追加用のバッファが準備され,Updateメソッドでそれらが追加される。

レコードを修正する

レコードを修正するには,修正したいレコードまで移動した後,EditメソッドとUpdateメソッドを用いる。

With rs
  .Edit
  .fields("first_name") = "電子"
  .fields("age") = 41
  .Update
End With

レコードを削除する

削除したいレコードまで移動して,Deleteメソッドを用いる。
rs.Move 3
rs.Delete

参考サイト・参考文献