VBAでアクションクエリを実行する
VBAでアクションクエリを実行する方法
Visual Basic EditorでSQLステートメントを記述する場合、基本構文はSQLビューと同じですが、ステートメントの記述方法が少し違います。SQLステートメントは、VBAでは文字列として扱われます。そのためSQLステートメントをダブルクォーテーションで囲む必要があります。抽出条件が文字列の場合は、条件値をシングルクォーテーションで囲みます。
アクションクエリをVBAで実行するには、RunSQLメソッドを使います。
《書式》
DoCmd.RunSQL "SQLステートメント" |
《設定例》
複数行に分ける場合、行ごとにダブルクォーテーションで囲み、アンパサンド(&)と、行継続文字を入力します。
行の終わりの文字とアンパサンドの前後には半角スペースを入力する必要があります。
下記例は、「T顧客マスタ」テーブルの「都道府県」が“東京都”のレコードを表示するというものです。
"SELECT * FROM T顧客マスタ" & _ |
《設定例》※SQL練習1.mdb の“F都道府県抽出"
次の例では、コンボボックス「都道府県」で指定した値で抽出し、リストボックスに
表示しています。
RowSourceプロパティを使うと、は連結していないデータをリストボックスに表示できます。
Private Sub 都道府県_AfterUpdate() Me!表示.RowSource = "SELECT * FROM T得意先マスタ " & _ End Sub |
アクションクエリの種類
アクションクエリには4つの種類があります。
追加クエリ(レコードを登録する)
《書式》
INSERT INTO 追加先テーブル名 SELECT フィールド名 FROM 追加元テーブル名 WHERE 条件式 |
フィールド名は、複数のフィールドを指定する場合はカンマで区切り、すべてのフィールドを指定する場合はアスタリスク(*)を入力します。
条件式は、「フィールド名 演算子 値」の形式で指定します。
《設定例》
次の例は、T商品マスタの備考フィールドが“限定品”のレコードを、「T限定品」テーブルに追加します。
DoCmd.RunSQL "INSERT INTO T限定品 SELECT * FROM T商品マスタ " & _ |
更新クエリ(レコードを更新する)
《書式》
UPDATE テーブル名 SET 更新する値 WHERE 条件式 |
《設定例》
'T得意先マスタの「チェック」フィールドをすべてONにする Dim SQL As String SQL = "UPDATE T得意先マスタ " & _ "SET チェック = On " DoCmd.RunSQL SQL |
削除クエリ(レコードを削除する)
削除クエリを使うと、指定条件を満たすレコードをテーブルから削除できます。
《書式》
DELETE FROM テーブル名 WHERE 条件式 |
《設定例》
次の例ではT得意先マスタの「顧客区分」フィールドの値が“D”のレコードを削除します。
Dim SQL As String SQL = "DELETE FROM T得意先マスタ " & _ "WHERE 顧客区分 = 'D' " DoCmd.RunSQL SQL |
テーブル作成クエリ
元のテーブルをコピーして新しいテーブルを作成します。
《書式》
SELECT フィールド名 INTO 新しいテーブル名 FROM 元のテーブル名 WHERE 条件式 |
《設定例》
「T得意先マスタ」テーブルで、都道府県が“埼玉県”のすべてのレコードをコピーして 「T顧客マスタ」テーブルを作成します。
Dim SQL As String SQL = "SELECT * INTO T顧客マスタ " & _ "FROM T得意先マスタ " & _ "WHERE 都道府県 = '埼玉県'" DoCmd.RunSQL SQL |