MS Access Tips/Sample and VBA and Blog customize etc...

削除したレコードを復活できる「ごみ箱」の設計

Accessでは削除したレコードは基本的には復活できません。削除する前に確認するようにしても、つい、うっかりと削除してしまう場合や、必要ないと思い削除しても後で必要になる場合もあったりします。

OS のごみ箱のように、いったんごみ箱へ移動しておいて、必要になったらまた復活させることができると便利ですね。テーブル単体では無理ですが、フォームから入力、削除するようにすれば、比較的簡単に実現できます。

DBDustbox.png

難易度:

概要

考え方としては、入力フォームでは削除禁止にしておいて、削除ボタンを配置して、そのクリック時に削除せずにごみ箱へ移動させます。

ごみ箱用のテーブルを作成しておいて、そちらにレコードを移動させるという考え方もありますが、リレーションシップの整合性や主キーの重複等の問題を考えると面倒です。そこで、元のテーブルに削除判断用のフィールドを用意しておいて、それにチェックを入れたら削除されたレコードと判断するという設計にします。

削除判断用のフィールドは、日付/時刻型にしておいて、削除日時を入れるようにするという方法もあります。削除日時が入っていれば削除されたレコード、Nullなら生きているレコードと判断します。

具体的には、削除日時 Is Null の抽出条件を設定したクエリをテーブル代わりにフォームやレポートのレコードソースに使います。

サンプル仕様

テーブル名 得意先
フィールド
 得意先コード(オートナンバー型 主キー)
 得意先名
 フリガナ
 ・・・

上記のテーブルでフォーム、レポートは設計済みとします。

このテーブルに、下記のフィールドを追加します。

フィールド名  データ型
 削除日時   日付/時刻型

テーブル名を T得意先 と変更します。

このテーブルよりクエリを作成します。削除日時の抽出条件を「Is Null」にします。

このクエリの名前を元のテーブル名「得意先」にします。こうすれば、設計済みのクエリ、フォーム、レポートは変更する必要はありません。

入力用フォームにコマンドボタンを2つ追加します。名前は、cmd削除、cmdごみ箱 とします。フォームモジュールは

入力フォームの「削除の許可」プロパティは「いいえ」にしておいてください。

ごみ箱用クエリを作成します。名前は、「得意先ごみ箱」

上記のクエリより帳票フォームを作成して、名前は「F得意先_ごみ箱」とします。フォームヘッダーかフッターにコマンドボタンを2つ配置します。名前は、cmd元に戻す、cmd削除。フォームの「追加の許可」は「いいえ」、また、各テキストボックスの「編集ロック」は「はい」にしておきます。

フォームモジュールは

以上です。ごみ箱用フォームは、非連結フォームにして、リストボックスにクエリ「得意先ごみ箱」のレコードを表示させてもいいでしょう。その場合は、削除は、削除クエリかADO、DAOで削除。元に戻すは、更新クエリか、ADO、DAOで削除日時を更新することになります。

サンプルファイルが下記からダウンロードできます。
DBDustbox_07.zip (Access 2007-2010 形式 - 39kb)
DBDustbox.zip (Access 2002-2003 形式 - 32kb)
DBDustbox_2k.zip (Access 2000 形式 - 27kb)

拍手する

Leave a reply






Trackbacks

trackback URL
http://hatenachips.blog34.fc2.com/tb.php/151-cef35fbd
該当の記事は見つかりませんでした。