導入文
Accessで業務システムを運用していると、
-
誰がいつデータを変更したのか分からない
-
誤って削除・更新された原因が追えない
-
トラブル時に復旧できない
といった問題が起こります。
これらを防ぐために重要なのが
ログ管理テーブル(更新履歴・操作履歴の保存) です。
この記事では、
Accessでログ管理テーブルを作成し、VBAで自動記録する方法を実務向けに解説します。
この記事でわかること
-
ログ管理テーブルの設計方法
-
更新履歴・操作履歴の保存方法
-
VBAで自動記録するサンプルコード
-
実務での活用例
-
運用時の注意点
ログ管理テーブルとは?
ログ管理テーブルとは、
データが「いつ・誰に・どのように」変更されたかを記録するテーブル
のことです。
例:
-
日時
-
ユーザー名
-
対象テーブル
-
操作内容(追加・更新・削除)
-
変更前の値
-
変更後の値
ログ管理テーブルの基本構成
テーブル名例:LogTable
| フィールド名 | 型 | 内容 |
| ———- | ——- | ——– |
| LogID | オートナンバー | 主キー |
| LogDate | 日付/時刻 | 操作日時 |
| UserName | 短いテキスト | 操作ユーザー |
| TableName | 短いテキスト | 対象テーブル |
| ActionType | 短いテキスト | 追加・更新・削除 |
| OldValue | 長いテキスト | 変更前の値 |
| NewValue | 長いテキスト | 変更後の値 |
VBAでログを記録する基本構文
Sub WriteLog(tableName As String, actionType As String, oldValue As String, newValue As String)
Dim sql As String
Dim userName As String
userName = Environ(“USERNAME”)
sql = “INSERT INTO LogTable (LogDate, UserName, TableName, ActionType, OldValue, NewValue) ” & _
“VALUES (Now(), ‘” & userName & “‘, ‘” & tableName & “‘, ‘” & actionType & “‘, ‘” & oldValue & “‘, ‘” & newValue & “‘)”
CurrentDb.Execute sql, dbFailOnError
End Sub
更新処理と同時にログを残す例
Sub UpdateWithLog()
Dim oldData As String
oldData = DLookup(“金額”, “売上”, “ID=1”)
CurrentDb.Execute “UPDATE 売上 SET 金額 = 2000 WHERE ID=1”, dbFailOnError
Call WriteLog(“売上”, “更新”, oldData, “2000”)
End Sub
削除処理のログ例
Sub DeleteWithLog()
Dim oldData As String
oldData = DLookup(“金額”, “売上”, “ID=1”)
CurrentDb.Execute “DELETE FROM 売上 WHERE ID=1”, dbFailOnError
Call WriteLog(“売上”, “削除”, oldData, “”)
End Sub
フォーム操作と連動させる方法
フォームのボタンに設定:
Private Sub btnSave_Click()
Call WriteLog(“顧客”, “更新”, Me.txtOld.Value, Me.txtNew.Value)
End Sub
実務での活用例
-
医療費管理システムの修正履歴
-
売上データの変更履歴
-
管理者向け監査ログ
-
トラブル原因調査
よくある注意点
ログが肥大化する
→ 定期的に古いログを削除 or 別DBへ移動
個人情報の扱い
→ 保存内容を最小限に
文字列連結SQLの注意
→ シングルクォート対策が必要
内部リンクにおすすめの記事
-
リンク
まとめ
ログ管理テーブルを作成することで、
-
誰が何を変更したか分かる
-
トラブル時の原因追跡ができる
-
業務システムとして信頼性が向上
します。
Accessを実務で使う場合は、
ログ管理機能を組み込むことを強くおすすめします。 -