Microsoft Access Club >SQL入門講座 >このページ >次頁 < 前項  サイト内検索
 

アクションクエリの作成と実行 - テーブル作成クエリ : SQL入門講座



今回から、アクションクエリを取り上げます。クエリの種類も多く、変化にとんだ操作が可能になります。

アクションクエリ
  • アクションクエリとは、元になるテーブルレコードに対して何らかの"アクション"を施すクエリのことをいいます。
  • クエリの種類としては、テーブル作成クエリ、更新クエリ、削除クエリ、追加クエリがあります。

SELECT 〜 INTO 〜 FROM 構文

SELECT 〜 INTO 〜 FROM 構文とは、FROMで指定したテーブルから、SELECTで指定したフィールドを持つ、INTOで指定したテーブル名で新しいテーブルを作成するSQL構文です。

  • SELECTに指定するフィールド数は、1つでも複数でも問題ありません。
  • 表示するフィールドの順番は、ここで指定する順番になります。
  • INTOには、新しいテーブル名を記述します。
  • FROMはには、複数のテーブルを指定することもできます。
  • Accessで新しいテーブルを作成する「テーブル作成クエリ」と機能的には同じです。
  • なお、テーブル作成を安易に実行するとデータベース管理に影響があるので、 IFステートメントとMsgboxステートメントを用いて、 ユーザーに処理を選択させる機能を付加する方がベターです。
サンプルテーブル

サンプルテーブル(出張管理)は以下のものを予定しています。

ID 社員名 出発日 帰社日 目的地 旅費額
2 橘 修平 2004/07/04 2004/07/05 京都支店 \28,400
4 柴田 喜一 2004/07/17 2004/07/21 東京支店 \78,310
1 正道 良一 2004/07/02 2004/07/05 広島支店 \56,720
3 田中 邦子 2004/07/10 2004/07/15 福井支店、石川支店 \98,200
構文
SELECT fieldname INTO newtablename FROM tablename
引数 意味 指定
fieldname フィールド名を指定します。
複数の場合は、カンマ(,)で区切ります。
*を指定すると全フィールドを指定します。 
省略不可
newtablename 新しいテーブル名を指定します。 省略不可
tablename テーブル名を指定します。 省略不可
サンプル構文

バックアップルテーブルとして、新規テーブル「T_BackUp」を作成します。

  • SELECT * INTO T_BackUp FROM 出張管理;

「ID」、「社員名」、「出発日」フィールドで新規テーブル「T_出張管理抜粋」を作成します。

  • SELECT ID, 社員名, 出発日 INTO T_出張管理抜粋 FROM 出張管理;
留意点
  1. 全フィールドを指定する場合は、アスタリスク(*)で代用が可能です。
  2. クエリのSQLパススルークエリを作成すると、 下記のような記述が現れます。

  1. この記述の内、最後のフィールドの次にあるカンマ(,)は不要です。
  2. INTOの前にあるアスタリスク(*)は不要です。
  3. このように、SQLパススルークエリに現れる記述文をもっとスリムにすることができます。

ADOを用いた事例

ADOを用いて テーブル作成SQLを実行します。具体的には、「ID」、「社員名」、「出発日」フィールドで新規テーブル「T_出張管理抜粋」を作成します。

Sub MySQLTableCreate()

On Error GoTo エラー
                
    Dim cn As New ADODB.Connection
    Dim cmd As New ADODB.Command
    Dim mySQL As String
    
    Set cn = CurrentProject.Connection 	'カレントデータベースに関連付けます。
    
    mySQL = "SELECT ID, 社員名, 出発日 "	'SQLを複数行で記述する方法
    mySQL = mySQL & "INTO T_出張管理抜粋 "
    mySQL = mySQL & "FROM 出張管理;"

    cmd.ActiveConnection = cn
    cmd.CommandText = mySQL
    
    If MsgBox("テーブルを作成します。", vbYesNo) = vbYes Then
        cmd.Execute mySQL
        MsgBox "テーブルを作成しました。"
    End If
                            
    cn.Close: Set cn = Nothing
    
    Exit Sub
    
エラー:
    
    If Err.Number = -2147217900 Then
        DoCmd.DeleteObject acTable, "T_出張管理抜粋" '削除します。
        Resume
    Else
        MsgBox Err.Number & " : " & Err.Description
    End If
    
End Sub
留意点
  1. VBA内でSQLを用いる場合は、前後をダブルクォーション(")で囲みます。
  2. 同名のクエリが既に存在しているとエラーになるので、エラーコード-2147217900が返されたら該当のテーブルを削除します。
結果

下記のようにテーブルが作成されます。

テーブル作成クエリ

このSQLをクエリで作成すると、下記のようになります。

DAOを用いた事例

DAOを用いて テーブル作成SQLを実行します。具体的には、バックアップルテーブルとして、全データを持った新規テーブル「T_BackUp」を作成します。

Sub MySQLTableCreate()

On Error GoTo エラー
                
    Dim db As DAO.Database
    Dim mySQL As String
    
    Set db = CurrentDb 'カレントデータベースに関連付けます。
    
    mySQL = "SELECT * " _	'SQLを複数行で記述する方法
            & "INTO T_BackUp " _
            & "FROM 出張管理;"

    If MsgBox("テーブルを作成します。", vbYesNo) = vbYes Then
        db.Execute mySQL
        MsgBox "テーブルを作成しました。"
    End If
                            
    db.Close: Set db = Nothing
    
    Exit Sub
    
エラー:
    
    If Err.Number = 3010 Then
        db.TableDefs.Delete "T_出張管理抜粋" '削除します。
        Resume
    Else
        MsgBox Err.Number & " : " & Err.Description
    End If
    
End Sub
留意点
  1. DAOの参照設定が必要です。
  2. その他、ADOの留意点を参考にして下さい。

RunSQLを用いた事例

アクションクエリのSQLは、RunSQLメソッドを用いて実行することができます。これは、 で解説しました。

Sub MySQLTableCreate()
                
    Dim mySQL As String
        
    mySQL = "SELECT * INTO T_BackUp FROM 出張管理;"

    If MsgBox("テーブルを作成します。", vbYesNo) = vbYes Then
        DoCmd.RunSQL mySQL
        MsgBox "テーブルを作成しました。"
    End If
                                    
End Sub
留意点
  • RunSQLメソッドを実行すると、Access既定の警告メッセージが表示されます。

まとめ

  • アクションクエリのSQLを実行する方法は多様です。 今挙げた、ADO、DAO、RunSQLを利用すると大概の場合、間に合うと思います。
  • WHERE句を組み合わせて、条件抽出を行いテーブルの作成も可能です。

関連ページ

2004/08/17

ページの先頭へ 前ページへ戻る

 


アクションクエリの作成と実行 - テーブル作成クエリ : SQL入門講座


-Microsoft Access Club-

cPanel あるいは PLESKコントロールパネルをインストールした専用レンタルサーバのディスカウントプランを期間限定で公開しています。
cPanel・PLESKコントロールパネルを備えた専用レンタルサーバ....。