VBAでアクションクエリを実行する

VBAでアクションクエリを実行する方法

Visual Basic EditorでSQLステートメントを記述する場合、基本構文はSQLビューと同じですが、ステートメントの記述方法が少し違います。SQLステートメントは、VBAでは文字列として扱われます。そのためSQLステートメントをダブルクォーテーションで囲む必要があります。抽出条件が文字列の場合は、条件値をシングルクォーテーションで囲みます。

アクションクエリをVBAで実行するには、RunSQLメソッドを使います。

《書式》

DoCmd.RunSQL "SQLステートメント"

《設定例》

複数行に分ける場合、行ごとにダブルクォーテーションで囲み、アンパサンド(&)と、行継続文字を入力します。
行の終わりの文字とアンパサンドの前後には半角スペースを入力する必要があります。
下記例は、「T顧客マスタ」テーブルの「都道府県」が“東京都”のレコードを表示するというものです。

"SELECT * FROM T顧客マスタ" & _
"WHERE 都道府県 = '東京都 '"

《設定例》※SQL練習1.mdb の“F都道府県抽出"

次の例では、コンボボックス「都道府県」で指定した値で抽出し、リストボックスに
表示しています。
RowSourceプロパティを使うと、は連結していないデータをリストボックスに表示できます。

Private Sub 都道府県_AfterUpdate()

Me!表示.RowSource = "SELECT * FROM T得意先マスタ " & _
" WHERE 都道府県 = '" & Me!都道府県 & "'"

End Sub

アクションクエリの種類 

アクションクエリには4つの種類があります。

  1. 追加クエリ(INSERT INTO)
  2. 更新クエリ(UPDATE)
  3. 削除クエリ(DELETE)
  4. テーブル作成クエリ(SELECT INTO)

 

追加クエリ(レコードを登録する) 

《書式》

INSERT INTO 追加先テーブル名
SELECT フィールド名
FROM 追加元テーブル名
WHERE 条件式

フィールド名は、複数のフィールドを指定する場合はカンマで区切り、すべてのフィールドを指定する場合はアスタリスク(*)を入力します。
条件式は、「フィールド名 演算子 値」の形式で指定します。

《設定例》

次の例は、T商品マスタの備考フィールドが“限定品”のレコードを、「T限定品」テーブルに追加します。

DoCmd.RunSQL "INSERT INTO T限定品 SELECT * FROM T商品マスタ " & _
"WHERE 備考 = '限定品'"

 

更新クエリ(レコードを更新する)

《書式》

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