フォームからユーザーによってデータが更新あるいは追加されたとき、ログとして、更新後追加後のデータをログ用テーブルに履歴として保存する方法です。
ここでは「仕入先」テーブルの更新ログを「仕入先更新ログ」テーブルに残す場合を例に説明します。
- まず、仕入先テーブルをコピーして仕入先更新ログテーブルを作ります。
- 仕入先更新ログテーブルのフィールド構造をログ用に変更します。ここでは次のような変更を加えます。
- この例では「ID」フィールドは主キーでかつオートナンバー型になっているので、ここには変更された仕入先テーブル上のIDを保存するものとし、主キーを解除し”重複ありのインデックス”に変更、さらに長整数型の数値型に変更します。
- 更新情報として、「更新日時(日付/時刻型)」と「更新者(テキスト型)」の2つのフィールドを追加します。
- 「更新日時」の既定値プロパティに「=Now()」という式を追加します。
- 次に、仕入先テーブルと連結されたフォーム上で、更新された特定の1レコード(IDフィールドの値で特定)を仕入先更新ログテーブルに追加するための追加クエリを作成します。ここでは、「更新者」と「ID(パラメータ名は”抽出ID”)」をパラメータとします。クエリ名は「qapp仕入先更新ログ」としました。
- 最後に、フォームの「更新後処理」イベントプロシージャに次のようなプログラムを書き込みます。
Private Sub Form_AfterUpdate()
Dim dbs As Database
Dim qdf As QueryDef
Set dbs = CurrentDb
Set qdf = dbs.QueryDefs("qapp仕入先更新ログ")
With qdf
.Parameters("抽出ID") = Me!ID
.Parameters("更新者") = "ほしの"
.Execute
End With
End Sub
ここでは更新者として固定的な名前を代入していますが、実際にはこのようなことはありません。データベース起動時にログインフォームのようなものを表示して、そこで入力されたユーザーの名前などをPublic変数に保存、その変数の値を代入するなどの方法を採ります。
実行例:
データ更新前のフォーム
データ更新後のフォーム
データ更新後のログテーブルの内容
|