[教えて!VBA] 第3回 Accessマクロで、テーブルのデータを全クリアするにはどうすればいいの??
概要
この記事について
かんたんな概要と結論
内部で行っていることはさほど違いがありません。
注意点として、テーブル削除と混同しないようにすることがあります。
こんにちは、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コードの内容が表示されます。
つまり、アクションクエリ作成のUIから作成しても、
実行するSQLは同じです。
違いとしては、
一度クエリを作成し、実行した場合、
内部でクエリ内容がコンパイルされ、
二度目以降の実行速度が改善するようです。
おまけ:テーブル削除をする方法
おまけとして、
データ全クリアではなくテーブル削除をする方も説明したいと思います。
組み込みアクションで実現
組み込みアクション(あらかじめAccessで作成済みのアクション)でテーブル削除するには、
DoCmd
モジュールに含まれるDeleteObject
メソッドを使用します。
1DoCmd.DeleteObject acTable, "サンプルテーブル"
SQLで実現
組み込みの関数を使用せずに自分でコードを書く場合、
SQLのDROP TABLE
構文を利用します。
1CurrentDb.Execute "DROP TABLE サンプルテーブル"
終わりに
データクリア命令とテーブル削除命令を混同しないようにして、
利用環境に合わせてクエリでもSQLでも自在にデータ操作を書けるようにすれば、
Access利用の幅が広がるでしょう。
関連記事
- [Access VBA] フォームのコントロール操作系の関数をどのようにユニットテストするかの方法メモ
- [Access VBA] RequeryとRefreshの使い分けデモ 「単票フォームの編集」編
- [Access VBA] 見積書作成ツール(Accessバージョン)を作成した
- [VBA, PowerShell] Accessのモジュール・クラスやクエリのSQLから特定文字列を抽出するためのテクニック
- [VBA] クラスを利用するメリットと方法について & 簡単なサンプル(2)