こんにちは!なかぜんです。
業務でAccessを使っていて「誰がいつどんな変更をしたか分からない…」と困ったことはありませんか?
そんなときに役立つのが「変更ログ(履歴)の記録」機能です。
今回は、Access初心者の方でも安心して実装できるように、変更内容を自動で記録する方法をやさしく解説します。
変更ログってなに?なぜ必要?
変更ログとは、データがいつ・誰によって・どのように変更されたかを記録する仕組みです。
変更ログを記録するメリット
- 変更ミスの追跡ができる
- 誰がいつ何を変更したか明確になる
- トラブル発生時に原因を探しやすい
とくに複数人で同じデータベースを使っている場合には必須の機能ですね!
基本の考え方と構成
まず、以下のような構成で進めます:
- 変更ログを記録する専用テーブルを作成
- 対象フォームのBeforeUpdateイベントでVBAコードを記述
1. 変更ログ用のテーブルを作ろう
以下のような構成で「T_変更ログ」というテーブルを作成します。
フィールド名 | データ型 | 内容 |
---|---|---|
ID | オートナンバー | 主キー |
変更日 | 日付/時刻 | 変更が行われた日時 |
ユーザー名 | 短いテキスト | 変更したユーザー名 |
テーブル名 | 短いテキスト | 対象テーブル名 |
フィールド名 | 短いテキスト | 変更されたフィールド |
旧値 | 短いテキスト | 変更前の値 |
新値 | 短いテキスト | 変更後の値 |
レコードID | 数値型 | 対象レコードのID |
2. フォームのBeforeUpdateイベントでVBAを書く
対象フォームの「BeforeUpdate」イベントに、変更ログを書き込む処理を追加します。
サンプルコード
Private Sub Form_BeforeUpdate(Cancel As Integer)
Dim ctl As Control
Dim strOldValue As String
Dim strNewValue As String
Dim db As DAO.Database
Dim rs As DAO.Recordset
Set db = CurrentDb
For Each ctl In Me.Controls
If ctl.ControlType = acTextBox Then
If Nz(ctl.Value, "") <> Nz(ctl.OldValue, "") Then
Set rs = db.OpenRecordset("T_変更ログ", dbOpenDynaset)
rs.AddNew
rs!変更日 = Now()
rs!ユーザー名 = Environ("Username")
rs!テーブル名 = "T_商品" ' 対象テーブル名を指定
rs!フィールド名 = ctl.Name
rs!旧値 = ctl.OldValue
rs!新値 = ctl.Value
rs!レコードID = Me!ID ' 主キーのフィールド名を指定
rs.Update
rs.Close
End If
End If
Next ctl
Set rs = Nothing
Set db = Nothing
End Sub
ポイント解説
- Environ(“Username”)でWindowsログイン名を取得
- ctl.OldValueは変更前の値、ctl.Valueは現在の値
- 対象のフォーム上のテキストボックスのみ処理対象としています
注意点とよくあるミス
- Me!IDなど主キーがNullの場合、ログ記録に失敗することがあります。保存済みレコードに対して使いましょう。
- 複数人で使用する場合、ログテーブルにロックがかからないよう排他制御を検討しましょう。
- ログテーブルが肥大化するので、定期的なバックアップや古いログの整理が必要です。
応用ポイント(中級者向け)
中級者の方には、以下の応用もおすすめです:
- 削除ログの追加:フォームの「Delete」イベントに対応
- SQLログ記録:クエリ実行前後にログを残す
- ログ専用のフォーム:「誰が何を変更したか」を確認できる管理画面の作成
まとめ:できたこと&次のステップ
今回は、Accessで変更ログを自動的に記録する方法を紹介しました。
業務で使える実用的な仕組みとして、ぜひ取り入れてみてください!
今回の学び
- ログ記録の重要性を理解できた
- BeforeUpdateイベントを使った実装方法を学んだ
- VBAでのレコード追加方法が身についた
次のステップ案内
次回は、「削除されたデータを記録する方法」や、「ログデータを分析するためのクエリの作成」など、さらに実用性の高い内容をご紹介する予定です!
お楽しみに♪
それでは、なかぜんでした!
bookfan 1号店 楽天市場店
¥2,992 (2025/05/05 08:01時点 | 楽天市場調べ)
