PR

Accessでレコードを追加するSQL文を実行する方法

VBA

Accessでデータベースを構築した後、VBAで処理を効率よくレコードを追加するためにSQL文を活用することができます。

SQL文とは、1970年代にIBMが開発したリレーショナルデータベース向けの操作用言語です。

SQL文の言語については以下の書籍を参考にしていただければと思いますが、今回はINSERT文を用いた処理の例を見ていきましょう。

https://amzn.to/3EXJqbP

スポンサーリンク

INSERT文について

INSERT文は、指定したテーブルにデータを登録するために用います。具体的には次のような記載をします。

INSERT INTO テーブル名 (フィールド名1, フィールド名2, …) VALUES (値1, 値2, …);

あるいは、フィールド名の記載を省略して次のように記載することもできます。

INSERT INTO テーブル名 VALUES (値1, 値2, …);

INSERT文でデータを登録する際には、対象フィールドのデータ型が一致するようにVALUES内を記載する必要があることに注意してください。

以上を踏まえて、サンプルテーブルにINSERT文を用いてデータを登録する方法を見ていきましょう。

サンプルテーブルの作成・INSERT文の例

サンプルテーブルとして「T_sample」テーブルを用意します。続いて、「氏名」と「生年月日」フィールドを追加し、それぞれのデータ型は「短いテキスト」と「日付/時刻型」とします。

さて、これでデータを入れるためのテーブルを作成できましたので、ここにINSERT文を用いてデータを登録していきます。

まず、今回の例では「2000年4月1日生まれの山田 一郎」さんを「T_sample」テーブルに登録することとすると、この場合にINSERT文は次のように記載します。

INSERT INTO T_sample (氏名, 生年月日) VALUES (‘山田 一郎’, #2000/4/1#);

これで、INSERT文を用いたデータのSQL文が出来上がりました。次からは、作成したSQL文をどのようにVBAで動かすかを見ていきましょう。

VBAによるSQL文の実装

VBAには「DoCmd」オブジェクトが用意されており、これを用いることで簡単にINSERT文の処理ができます。

具体的に次のコードを標準モジュールに実装してください。

Private Sub InsertSQL()

'変数宣言
Dim mySQL As String

'変数に実行するSQL文を格納する。
mySQL = "INSERT INTO T_sample (氏名, 生年月日) VALUES ('山田 一郎', #2000/4/1#);"

'DoCmd.RunSQLメソッドを用いてSQL文を実行する。
DoCmd.RunSQL mySQL


End Sub

ご覧のとおり、いたってシンプルなコードでINSERT文を用いた処理の実装ができます。

DoCmdオブジェクトでINSERT文を実行するためには、RunSQLメソッドを使用します。RunSQLメソッドでは実行するSQL文を引数に指定します。そのため、「mySQL」変数にSQL文をテキスト形式で格納し、これをRunSQLメソッドの引数とします。

「mySQL」変数には、先に紹介したINSERT文の記載方法に則った内容を格納しています。

これで、一通りの処理に対する実装ができましたので、VBAを実行して処理結果を確認しましょう。

VBAの実行

作成したVBAによる処理を実行してみましょう。

「T_sample」テーブルはデータが入っていない状態ですが、ここでVBAで実装した処理を実行すると図1のようにレコード追加に関する確認ボックスが表示され、「はい」を選択すると1レコードが追加されます。

一連の流れは図1に示すとおりです。

図1 INSERT文を用いたVBAによる処理

まとめ

今回は、VBAを用いてINSERT文によるレコード追加の方法を紹介しました。サンプルでは固定のデータを登録しましたが、変数を設定することもでき、データ処理のプロセスに応じて実装していくことで業務効率の改善を図ることもできますので、本記事を参考にしていただければと思います。

紹介した内容は専門書などでも説明がありますので、是非ご参考になさってください。

スポンサーリンク

Kindle Unlimitedにサインアップして無料体験に登録する
Kindle Unlimitedに登録すると、人気のシリーズ、ベストセラー、名作などに好きなだけアクセスして、シームレスなデジタル読書体験を実現できます。

コメント

タイトルとURLをコピーしました