[Access-VBA] テーブルの複製を新規作成する(select ~ into ~ from)

Pocket

ここでは、テーブルの複製を作成するサンプルを掲載しています。なお、すべてのカラムを複製することも、一部のカラムのみのデータを複製することもできます。

スポンサーリンク

テーブルの複製を新規作成する

次の VBA スクリプトによってオリジナルテーブルと同じ構造を持つ別テーブルを作成することができます。

    ' 結構しつこく確認ダイアログが出力されるので、抑制したい場合に記述する
    DoCmd.SetWarnings WarningsOn:=False

    Dim sql As String

    sql = "select * into バックアップテーブル2017 from オリジナルテーブル;"
    DoCmd.RunSQL sql

    ' システムメッセージの抑制を解除
    DoCmd.SetWarnings WarningsOn:=True

オリジナルテーブルの全てのカラムのデータで「バックアップテーブル2017」という名前の新テーブルを作成しています。複製するカラムを指定する場合には、通常の select 文のようにカラムをカンマで区切りで指定します。

    ' カラムを指定してテーブルを作成する
    sql = "select col1, col2, col3 into バックアップテーブル2017 from オリジナルテーブル;"

なお、上記の例で言えばテーブル(バックアップテーブル2017)が既に存在する状態で、select ~ into ~ from 文を再実行しようとすると、テーブル(バックアップテーブル2017)は一度削除されてから、再作成されます。

 

謎SQL

Access では次の VBA は正常に動作します。謎仕様です。VBA と言えばよいのか、SQLの解釈と言えばよいのか・・・・

もしかして有名な話なのですか?これって。


    Dim sql As String
    
    ' 全レコードが削除される
    ' もちろん、「 delete from テーブル1 」も動作します。
    sql = "DELETE * FROM テーブル1;"
    DoCmd.RunSQL sql

    ' カラム(col1)のみ全部消えるかとも一瞬思いましたが
    ' 上記SQLと動作は同じです。
    sql = "DELETE col1 FROM テーブル1;"
    DoCmd.RunSQL sql

 

スポンサーリンク


Pocket

Leave a Comment

Your email address will not be published. Required fields are marked *