Accessでデータベースの作成を進めると、VBAでデータの処理をしたいといったニーズが出てきます。VBAでデータを操作する方法としては、ADOによる処理もありますが、ここではDAO(Data Access Object)を用いた方法について紹介します。
ADOの基本的な使用方法については、以下の記事をご参照ください。
それでは、DAOの基本的な操作として、まずはサンプルデータを用意します。
サンプルデータについて
サンプルデータとして、「T_商品」テーブルを作成し、「ID」及び「商品名」フィールドを作成します。それぞれのデータ型は「オートナンバー型」及び「短いテキスト」とします。
続いて、サンプルデータを表1に示すように登録します。
表1 サンプルデータ
ID | 商品名 |
1 | ごまスティック |
2 | きらず揚げ |
3 | しるこサンド |
4 | 八つ橋 |
以上のサンプルデータを用意したところで、DAOによるデータ操作の方法を見ていきましょう。
DAOによるデータ操作
まずは、DAOを用いるためにライブラリの設定が必要になります。
「Alt+F11」キーを押下し、Microsoft Visual Basic for Application(以下、VBA)画面を開きます。
続いて、図1に示すように「ツール」→「参照設定」とクリックします。
参照設定用の画面が開くため、「Microsoft Office XX.X Access database engine Object Library」にチェックを入れます。ここで、「XX.X」はバージョンごとに数値が変わりますので、お手元のAccessバージョンに合ったものにチェックを入れてください。
これで、DAOを使うことができるようになりましたので、早速簡単なデータ処理を実装していきましょう。まず、「挿入」→「標準モジュール」と選択し、コードを入力するための準備をします。
「Module1」が新たに作られ、コードウィンドウが表示されますので、ここに以下のコードを追記します。なお、今回は「DAO_Sample Subプロシージャ」に「T_商品」テーブルの「ID」及び「商品名」をレコード順にイミディエイトウィンドウに表示するためのコードを記載するようにしました。
レコードセットを作成するにあたっては、SQL文を用いていますが、SQLを使ったことがない方は専門書も参考になると思いますので、一読されることをお勧めいたします。
スポンサーリンク
また、ループ処理は順番にレコードの値を取得していき、レコードセットの「End Of File (EOF): レコードの最後尾」になった段階で抜け出すこととしています。
Private Sub DAO_Sample() '変数宣言 Dim db As DAO.Database Dim rs As DAO.Recordset '現在開いているデータベースに接続する。 Set db = CurrentDb 'SQL文でT_商品を開くためのレコードセットを作成する。 Set rs = db.OpenRecordset("SELECT ID, 商品名 FROM T_商品", dbOpenDynaset) '先頭レコードに移動する。 rs.MoveFirst 'ループにより順番にレコードの値を表示する。 Do Until rs.EOF = TrueDebug.Print "ID: " & rs!ID & ", 商品名: " & rs!商品名 '次のレコードに移動する。
rs.MoveNext
Loop 'レコードセットを閉じる。 rs.Close Set rs = Nothing 'データベースの接続を閉じる。 db.Close Set db = Nothing End Sub
コードを追記した後、画面上の「▶」アイコンをクリックします。これにより、図5に示すように、イミディエイトウィンドウに「T_商品」の「ID」及び「商品名」のデータが順番に表示されました。
このように、DAOを用いることで、カレントデータベース(現在開いているデータベースのこと)にアクセスし、レコードを自由に操作することができるのです。
まとめ
今回は、DAOを用いてAccessデータベースのデータ操作方法について紹介をしました。DAOを用いると、データを更新したり、レコードを削除したり、またテーブルそのものを作成することもできます。今後の記事でこれらについては、紹介していきたいと思いますので、引き続きご愛顧のほど宜しくお願いいたします。
スポンサーリンク
コメント