access応用・ツール・実例 PR

Accessでログ管理テーブルを作る方法|更新履歴・操作履歴を保存するVBA実例

記事内に商品プロモーションを含む場合があります

導入文

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 VBAエラー対策チェックリスト

  • Access VBAでよくあるトラブルと解決方法まとめ

  • Accessでバックアップを自動作成するVBA

    まとめ

    ログ管理テーブルを作成することで、

    • 誰が何を変更したか分かる

    • トラブル時の原因追跡ができる

    • 業務システムとして信頼性が向上

    します。

    Accessを実務で使う場合は、
    ログ管理機能を組み込むことを強くおすすめします。