Accessには、テーブルで行った削除や追加、更新などの実行時に、設定した処理を自動で実行してくれる[データマクロ]というのがあります。
この機能を使って、削除したレコードを[削除テーブル]へ自動で保存することができます。
データマクロは、Access2010以降の機能です。
参考ここでは[ドキュメントウィンドウオプション]で[タブ付きドキュメント](既定)を選択しています。[ウィンドウを重ねて表示する]と[タブ付きドキュメント]の違いについては、以下の記事で解説しています。
-
[タブ付きドキュメント]と[ウィンドウを重ねて表示する]の違い
Access2007以降、オブジェクトを表示すると、タブ付きウィンドウで表示されるようになっています。 昔からAccessを使用している方に ...
削除したレコードを保存するテーブルを作成
商品マスターとして、以下のようなテーブル[T_商品]を作成しています。
以下は、デザインビューです。
マスターテーブルをコピーして削除テーブルを作成
削除したレコードを保存するテーブルを作成します。
マスターテーブル[T_商品]をコピーします。
貼り付けを実行すると、[テーブルの貼り付け]ダイアログボックスが表示されますので[テーブル構造のみ]を選択します。
テーブルに名前を付けて[OK]ボタンをクリックします。
ここでは、[T_生産停止商品]という名前にします。
テーブル[T_生産停止商品]をデザインビューで開き、以下のように変更します。
フィールド名[生産停止ID](オートナンバー型)と、[生産停止日](日付/時刻型)を追加します。
マスターテーブル[T_商品]と同じフィールドには、同じデータ型を指定します。
これで空っぽの[T_生産停止商品]ができました。以下は、テーブル[T_生産停止商品]のデータシートビューです。
このテーブルにマスターテーブル[T_商品]で削除されたレコードを保存していきます。
テーブルは保存して閉じておきます。
参考[テーブルの貼り付け]ダイアログボックスについては、以下の記事で解説しています。
-
テーブル・クエリなどのオブジェクトをコピーして活用する
Accessの1つのデータベース内でテーブルやクエリ、フォーム、レポートなどのオブジェクトをコピーする方法です。 コピーボタンや貼り付けボタ ...
[削除後処理]のデータマクロを作成
マスターテーブル[T_商品]表示します。
データシートビューでも、デザインビューでもかまいません。
データシートビュー/デザインビューで操作
データシートビューであれば、[テーブル]タブの[イベント後]グループにある[削除後処理]をクリックします。
削除後処理
レコードが削除された後に実行するロジックを作成します。
[Old].[Field Name] を使用して、レコードが削除される前のフィールドの値を検査します。デザインビューで操作する場合は、[テーブルデザイン]タブの[フィールド/レコード/テーブルのイベント]グループにある[データマクロの作成]から[削除後処理]をクリックします。
データマクロアクション[レコードの作成]を選択
[新しいアクションの追加]の▼ボタンをクリックして、アクションの一覧から[レコードの作成]を選択します。
[アクションカタログ]から選択してマクロウィンドウへ追加する方法もあります。
[レコードの作成]アクションになります。
[レコードの保存先]は、プルダウンから[T_生産停止商品]を選択します。
すぐ下にある[新しいアクションの追加]をクリックします。
プルダウンから[フィールドの設定]を選択します。
注意[新しいアクションの追加]が2個並んでいますが、[レコードの保存先]アクションの中にある[新しいアクションの追加]を選択します。
[フィールドの設定]の[名前]には、以下のように入力します。[テーブル名]は、保存先のテーブル名です。
[テーブル名] の後ろは、[!](エクスクラメーション)でも構いません。ここでは、以下のようになります。
[フィールドの設定]の[値]には、以下のように入力します。
[o]まで入力すると、入力補助メニューが表示されますので、選択すると効率的です。
[Old]の後ろは、[.](ドット)を入力します。すると、また入力補助メニューが表示されますので、[商品コード]を選択します。[値]は、以下のようになります。
続けて、フィールドの設定を追加します。
[新しいアクションの追加]のプルダウンから[フィールドの設定]を選択します。
この時もすぐ下の[新しいアクションの追加]を選択します。間違えないようにしてください。
フィールドの設定は以下のように設定します。
最後に、生産停止日を自動で入力したいので、[フィールドの設定]を選択して、名前にテーブル[T_生産停止商品]の[生産停止日]を指定します。
[値]には、以下のように入力します。時間まで表示したいのであれば、[Now()]にしてください。
Date()
削除テーブルに保存したいフィールドが多い場合は、少し大変かもしれませんが工夫してやってみてください。
マクロアクションの設定が完了したら、上書き保存して、マクロウィンドウは閉じます。
参考同じアクションを追加する場合は、コピー&ペーストすると効率的です。
-
マクロツールで既存のアクションをコピーして活用(再利用)するには
Accessでは多くのマクロアクションが使用できます。 しかし、毎回アクションを選択して入力するのは面倒ですね。 マクロアクションは、コピー ...
データマクロ[削除後処理]の動作確認
動作を確認してみます。
マスターテーブル[T_商品]を表示します。
1つのレコードを選択して、削除します。
テーブル[T_生産停止商品]を表示すると、削除したレコードが追加されています。
もし、両方のテーブルを起動しているのであれば、[ホーム]タブの[レコード]グループにある[すべて更新]をクリックしてみてください。
参考テストとして、レコードを削除して動作を確認した後、オートナンバーを振り直す場合は、以下の方法が簡単です。
-
オートナンバー型の番号の振り直し(切り取りと貼り付けでリセット)
Accessのテーブルでフィールドのデータ型を[オートナンバー型]にして、レコードを削除すると、そのレコードは欠番になります。 以下のテーブ ...
もしくは、レコードをすべて削除して最適化を実行すると、振り直されます。
-
ファイルサイズが大きくなってしまったら[最適化と修復]を実行
Accessのデータベースファイルは、使用していくうちに容量が大きくなっていきます。オブジェクトを編集したり、削除したりする操作を繰り返して ...
データマクロ[削除後処理]のアクション編集
データマクロの完成後に、フィールドを追加したい場合などは修正することができます。
データマクロの設定をした後は、[テーブル]タブの[イベント後]グループの[削除後処理]ボタンの色が変わっていますので、分かりやすいと思います。
クリックすると、マクロウィンドウが表示されます。
もちろん、デザインビューからも表示できます。
[データマクロ]-[削除後処理]をクリックします。
フィールドの設定を削除する場合は、各フィールドの設定の[削除]ボタンをクリックします。
レコードの作成先のフィールドの設定をしない場合は、空白になります。
アクション[レコードの作成]を削除する場合は、アクションの[削除]ボタンをクリックします。
参考削除クエリを作成した場合も、データマクロを作成しておくと安心ですね。
-
削除クエリの作成(すべてのレコード/条件を指定したレコード)
Accessでテーブルのすべてのレコードを削除するには、すべてのレコードを選択して削除する方法もありますが、削除クエリを作成して簡単に削除す ...
以下の記事では、データマクロ[更新後処理]を使って更新履歴をテーブルへ保存する方法を解説しています。
-
更新日時を指定テーブルやフィールドへ自動で保存するデータマクロ
Accessのテーブルのデータを処理するためのマクロのことを[データマクロ]と呼びます。 テーブルで行った削除や追加、更新などの実行時に、設 ...