外部連携 × SQLログの記録
外部データベースと連携する際に「どんなSQLを実行したか」「いつ実行したか」を ログとして残す 仕組みを作っておくと、トラブルシューティングや監査に役立ちます。
初心者向けに、コード例やテンプレートをかみ砕いて説明します。
基本の考え方
- SQLログとは?
実行したSQL文や結果をファイルやシートに記録する仕組み。 - 用途:
- どんなSQLを実行したかを後から確認できる
- エラー発生時の原因調査に役立つ
- 実務で「監査証跡」として利用可能
テンプレ1:SQL文をログファイルに書き出す
Sub SQL_Log_ToFile()
Dim conn As Object
Dim sql As String
Dim fso As Object, ts As Object
Dim logPath As String
' ログファイルのパス
logPath = Environ("USERPROFILE") & "\Desktop\sql_log.txt"
' 実行するSQL
sql = "UPDATE Customers SET Age = 31 WHERE Name = '山田太郎'"
' DB接続(例:Access)
Set conn = CreateObject("ADODB.Connection")
conn.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;" & _
"Data Source=C:\temp\sample.accdb;"
conn.Open
' SQL実行
conn.Execute sql
' ログ書き込み
Set fso = CreateObject("Scripting.FileSystemObject")
Set ts = fso.OpenTextFile(logPath, 8, True) ' 8=追記モード
ts.WriteLine Now & " 実行SQL: " & sql
ts.Close
conn.Close
MsgBox "SQLを実行し、ログに記録しました!"
End Sub
VB- ポイント:
OpenTextFile(..., 8, True)で追記モード。Nowで日時を記録。
テンプレ2:SQLログをシートに記録する
Sub SQL_Log_ToSheet()
Dim conn As Object
Dim sql As String
Dim ws As Worksheet: Set ws = Worksheets("SQL_Log")
Dim lastRow As Long
sql = "INSERT INTO Customers (Name, Age) VALUES ('鈴木花子', 25)"
Set conn = CreateObject("ADODB.Connection")
conn.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;" & _
"Data Source=C:\temp\sample.accdb;"
conn.Open
conn.Execute sql
' ログをシートに記録
lastRow = ws.Cells(ws.Rows.Count, 1).End(xlUp).Row + 1
ws.Cells(lastRow, 1).Value = Now
ws.Cells(lastRow, 2).Value = sql
ws.Cells(lastRow, 3).Value = "成功"
conn.Close
MsgBox "SQLを実行し、シートにログを記録しました!"
End Sub
VB- ポイント:
- ログ専用シートを作って記録。
- 実行日時・SQL文・結果を残す。
テンプレ3:エラー時もログに残す(Try-Catch的処理)
Sub SQL_Log_WithError()
Dim conn As Object
Dim sql As String
Dim ws As Worksheet: Set ws = Worksheets("SQL_Log")
Dim lastRow As Long
sql = "DELETE FROM Customers WHERE Name = '佐藤'"
On Error GoTo ErrHandler
Set conn = CreateObject("ADODB.Connection")
conn.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;" & _
"Data Source=C:\temp\sample.accdb;"
conn.Open
conn.Execute sql
' 成功ログ
lastRow = ws.Cells(ws.Rows.Count, 1).End(xlUp).Row + 1
ws.Cells(lastRow, 1).Value = Now
ws.Cells(lastRow, 2).Value = sql
ws.Cells(lastRow, 3).Value = "成功"
conn.Close
Exit Sub
ErrHandler:
' エラーログ
lastRow = ws.Cells(ws.Rows.Count, 1).End(xlUp).Row + 1
ws.Cells(lastRow, 1).Value = Now
ws.Cells(lastRow, 2).Value = sql
ws.Cells(lastRow, 3).Value = "エラー: " & Err.Description
If Not conn Is Nothing Then conn.Close
MsgBox "SQL実行中にエラーが発生しました。ログに記録しました。"
End Sub
VB- ポイント:
On Error GoTo ErrHandlerでエラー処理。- 成功・失敗どちらもログに残す。
例題で練習
'例1:UPDATE文を実行してログファイルに記録
'例2:INSERT文を実行してログシートに記録
'例3:DELETE文を実行して成功/失敗をログに残す
VB初心者向けポイント
- SQLログは「いつ・何を実行したか」を残す仕組み
- ファイルに書き出す方法とシートに記録する方法がある
- エラー処理を組み込むと安心
- 実務では「監査証跡」として必須
- Excelを「SQL実行履歴ビューア」として使える
👉 この「外部連携 × SQLログテンプレ」を覚えておけば、Excel VBAで 外部DBと連携したSQL実行の履歴を残し、監査やトラブル対応に活用する処理 を簡単に作成できます。
