#531 レコードの更新ログをとる例 フォーム、VBA

フォームからユーザーによってデータが更新あるいは追加されたとき、ログとして、更新後追加後のデータをログ用テーブルに履歴として保存する方法です。

ここでは「仕入先」テーブルの更新ログを「仕入先更新ログ」テーブルに残す場合を例に説明します。

  1. まず、仕入先テーブルをコピーして仕入先更新ログテーブルを作ります。

  2. 仕入先更新ログテーブルのフィールド構造をログ用に変更します。ここでは次のような変更を加えます。

    • この例では「ID」フィールドは主キーでかつオートナンバー型になっているので、ここには変更された仕入先テーブル上のIDを保存するものとし、主キーを解除し”重複ありのインデックス”に変更、さらに長整数型の数値型に変更します。
    • 更新情報として、「更新日時(日付/時刻型)」と「更新者(テキスト型)」の2つのフィールドを追加します。
    • 「更新日時」の既定値プロパティに「=Now()」という式を追加します。

      仕入先テーブルのデザインビュー
      仕入先更新ログテーブルのデザインビュー

  3. 次に、仕入先テーブルと連結されたフォーム上で、更新された特定の1レコード(IDフィールドの値で特定)を仕入先更新ログテーブルに追加するための追加クエリを作成します。ここでは、「更新者」と「ID(パラメータ名は”抽出ID”)」をパラメータとします。クエリ名は「qapp仕入先更新ログ」としました。
    クエリのデザインビュー

  4. 最後に、フォームの「更新後処理」イベントプロシージャに次のようなプログラムを書き込みます。

    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変数に保存、その変数の値を代入するなどの方法を採ります。

実行例:

データ更新前のフォーム
更新前のフォーム

データ更新後のフォーム
更新後のフォーム

データ更新後のログテーブルの内容
更新後のログテーブルの内容
| Index | Prev | Next |



T'sFactory
Accessで動く生産管理DB
Ureru Express
Webで使う販売顧客管理
Access開発&アドバイス
DB開発やテクニカルアドバイス
Copyright © T'sWare All rights reserved