[教えて!VBA] 第3回 Accessマクロで、テーブルのデータを全クリアするにはどうすればいいの??

概要

この記事について

かんたんな概要と結論

テーブルデータクリアには、作成済みクエリ経由とSQL経由の二通りがありますが、
内部で行っていることはさほど違いがありません。

注意点として、テーブル削除と混同しないようにすることがあります。

こんにちは、dedeです。

この記事では、
VBAマクロに関する質問のうち、
皆が疑問に思っているトピックについて解説いたします。

今回は、 Accessマクロで、テーブルのデータを全クリアする方法
を解説いたします。

※この記事は、Office VBAマクロのうち
Access VBAマクロに関するトピックです。

レベル:初級者向け

注意:テーブルデータクリアとテーブル削除の違い

最初に気をつけなければならないのは、
「テーブルのデータ全クリア」と「テーブル削除」という
2つの紛らわしい概念を整理しなければならないということです。

似ているけれど、この2つの意味するところは違います。

テーブルのデータ全クリアはデータ(レコード)自体は削除しますが、
テーブル構造やメタデータ(メタデータについては後述)は残ります。

一方、テーブル削除は
テーブルそのものを削除するため、テーブル構造やメタデータも失われ、
テーブルの再度の利用はできなくなります。

そのため、使用しないテーブルや一時的に利用するだけに動的に作成したテーブルなどは、
テーブルのデータクリアよりもテーブル削除のほうが適しており、
それ以外はテーブルデータクリアのほうが安全かと思われます。

テーブルデータクリアとテーブル削除の違い

※メタデータについて
ここでいうテーブルのメタデータとは、
本体であるデータ(レコード)に関する付帯情報のことで、
テーブル作成日時、更新日時、各フィールドについての説明文章などが該当します。

テーブルデータクリアの方法

クリアの方法には
大きく分けてクエリ経由とSQL経由の二種類があります。

アクションクエリを作成して呼び出す

アクションクエリを作成後にVBAで呼び出してクリアする方法について説明します。

【アクションクエリとは】
テーブルの中のデータを操作するクエリを指します。
「データ登録、読み取り、更新、削除」をするクエリが含まれます。

一方で、テーブルのフィールドを変更したり、
テーブルを新規作成したりするクエリは「データ定義クエリ」と呼びます。

準備

①新規クエリを作成する

「クエリデザイン」ボタンを押下し、
クエリ作成画面を表示します。

「クエリデザイン」ボタンを押下

データクリアしたいテーブルをポップアップから選択します。

テーブルの選択

②削除クエリとして設定し、保存する

上部の「クエリデザインタブ」から
削除ボタンを押下します。

削除クエリを選択

任意の名前をつけて保存します。

実行

次のように、
作成したクエリの名前を引数として、
データクリア命令を実行します。

1Sub クエリを利用したテーブルクリア関数()
2    CurrentDb.Execute "削除クエリサンプル"
3End Sub

SQLでクリアコードを記述して実行する

SQL(データベースを操作するための標準化された言語)を使用することでも
目的を実現することができます。

レコード削除するためのSQL命令文は、
DELETE FROM構文です。

1DELETE FROM TABLE_NAME

これをVBAで実行するには、
次のようにします。

1Sub SQLを利用したテーブルクリア関数()
2    CurrentDb.Execute "DELETE FROM サンプルテーブル"
3End Sub

実はやっていることは同じ?

これまで説明した2通りの方法は、
実は内部でやっている事はだいたい同じです。

クエリを開き、
右下のSQLタブを選択すると……

SQLタブの選択

クエリの実行内容として登録されている
SQLコードの内容が表示されます。

SQLコードの内容

つまり、アクションクエリ作成のUIから作成しても、
実行するSQLは同じです。

違いとしては、
一度クエリを作成し、実行した場合、
内部でクエリ内容がコンパイルされ、
二度目以降の実行速度が改善するようです。

おまけ:テーブル削除をする方法

おまけとして、
データ全クリアではなくテーブル削除をする方も説明したいと思います。

組み込みアクションで実現

組み込みアクション(あらかじめAccessで作成済みのアクション)でテーブル削除するには、
DoCmdモジュールに含まれるDeleteObjectメソッドを使用します。

1DoCmd.DeleteObject acTable, "サンプルテーブル"

SQLで実現

組み込みの関数を使用せずに自分でコードを書く場合、
SQLのDROP TABLE構文を利用します。

1CurrentDb.Execute "DROP TABLE サンプルテーブル"

終わりに

データクリア命令とテーブル削除命令を混同しないようにして、
利用環境に合わせてクエリでもSQLでも自在にデータ操作を書けるようにすれば、
Access利用の幅が広がるでしょう。

関連記事

comments powered by Disqus