これまでに、DAO(Data Access Object)によるデータベース接続の方法を紹介してきました。
今回は、DAOを用いてレコードを追加する方法を紹介していきます。なお、ADOを用いたレコードの追加方法については以下の記事をご参考にしてください。
また、DAOとADOによるレコード追加方法が比較しやすいように、上記記事で紹介したサンプルと同じものを使って処理方法を見ていくこととします。
サンプルテーブルについて
まず、サンプルテーブルの構造は表1に示すとおりとします。
表1 サンプルテーブルの構造
フィールド名 | データ型 |
ID | オートナンバー型 |
氏名 | 短いテキスト |
年齢 | 数値型 |
日付 | 日付/時刻型 |
ここでは、良く使うデータ型を用いて設定方法を紹介できるようにしました。
次に、サンプルデータは表2のようにしました。
表2 サンプルデータについて
ID | 氏名 | 年齢 | 日付 |
1 | 鈴木 太郎 | 24 | 2020/07/20 |
2 | 佐藤 次郎 | 39 | 2020/07/21 |
3 | 高橋 花子 | 42 | 2020/09/21 |
4 | 山田 一郎 | 33 | 2020/09/21 |
DAOによるレコード追加処理について
まずは、標準モジュールに「Date_Add_DAO」サブプロシージャを追加し、以下に示すようにコードを作成します。
Public Sub Data_Add_DAO() Dim db As DAO.Database 'データベース用変数の設定 Dim rs As DAO.Recordset 'レコードセット用変数 '自データベースの接続設定 Set db = CurrentDb() 'サンプルテーブルを開く Set rs = db.OpenRecordset("サンプルテーブル", dbOpenDynaset) 'レコードを追加する。 rs.AddNew '各フィールドに値を追加する。 rs!氏名 = "井上 銀二" rs!年齢 = 50 rs!日付 = #3/27/2021# 'レコードを更新して値追加を完了させる。 rs.Update 'テーブルを閉じる rs.Close: Set rs = Nothing 'データベースの接続を解除する。 db.Close: Set cn = Nothing End Sub
それでは、上記のコードについて、一つずつ確認をしていきましょう。
最初の処理は、データベース用及びレコードセット用の変数宣言を行い、自データベースへの接続を行います。ADOによる接続と若干異なりますので、ご注意ください。
次に、今回作成した「サンプルテーブル」へアクセスをしますが、この際には「OpenRecodsetメソッド」を用います。
object.OpenRecodset(Name, Type, Options, LockEdit)
ここで、「Name」引数には対象となるテーブル名、クエリ名やSQL文を指定することができます。次に、「Type」引数はレコードセットのタイプを、「Options」引数にはオプションを、「LockEdit」引数にはロックの種類を指定します。
今回の場合、「Options」と「LockEdit」は省略しています。
また、「Type」引数には「dbOpenDynaset」を指定することが一般的です。
これで、「サンプルテーブル」への接続ができ、「rs.AddNew」によりレコードセットを追加します。(この状態では空のレコードセットが出来上がりますが、「ID」フィールドはオートナンバー型のため自動で番号が付番されます。)
続いて、「rs!○○○ ※○○○はフィールド名」として明示的に値を追加するフィールド名を設定します。このとき注意が必要な点として、フィールド名を設定する場合は、「rs.」のようにピリオドを用いるのではなく、「rs!」とエクスクラメーションマークを用います。ピリオドはオブジェクトのプロパティを指定する際に用いますので、ご注意ください。
「rs!○○○ =」のように「=」を用いて、左辺に右辺の値を入れ込んでいきますが、ここではサンプルテーブルの各フィールドに、上記コードで示した各値を追加していきます。
ここで、追加する値はテキスト型、数値型、日付/時刻型と様々なデータ型を用意してみましたので、それぞれの記載方法を確認していきましょう。
まず、テキスト型の場合は、「”井上 銀二”」のようにダブルクオーテーションで文字列を括っています。数値型の場合は「50」と、ダブルクォーテーションで括ることなく、値をそのまま記載しています。また、日付/時刻型の場合は「#3/27/2021#」とシャープマークで値を括っています。
各フィールドへの登録手続きが終わった後(この段階でデータの登録は確定していません。)、「rs.Update」により各フィールドへの値の登録を確定させます。
「rs.Update」の記述を忘れるとデータ登録がコミットされませんのでご注意ください。
なお、「rs.AddNew」から「rs.Update」までの処理にかかるコードはADOと全く同じとなります。
最後に、テーブルを閉じ、データベース接続を切ることで、一通りの処理が完了します。
DAOによるレコード追加の確認
それでは、「サンプルテーブル」に値が反映されることを確認しましょう。
まずは、サンプルテーブル中のレコードが図1になっていることを確認します。そして、VBA画面に戻り、「Data_Add_DAO」サブプロシージャが選択された状態で画面上の「▶」を1回だけクリックします(図2参照)。
これで、DAOによるレコード追加が行われます。(見た目上は何も変わっていないように思われますが、処理は終わっていますので、「▶」を何回もクリックしないように気を付けてください。)
再度、サンプルテーブルを開くと図3に示すように、「井上 銀二」のレコードが追加されていることが分かります。
処理にかかるプロセス、結果はADOの場合で実装したものとほとんど変わらないかと思います。
まとめ
今回はDAOによるレコード追加方法を紹介しました。サンプルコードでは直接、値を記載しましたが、別のテーブルの値を取得することもできますし、Excel等外部データから情報を取得することもでき、汎用性が広い方法ですので、この機会にぜひ使い方をマスターしていただければと思います。
また、別にご紹介しているADOによる処理方法とも非常にコードの記載内容が似ており、基本的にはどちらかの処理方法を習得すれば実務上困ることはないかと思います。
スポンサーリンク
コメント