'====================================================
'VB6 Access.mdb + DAO を使ってログを取るクラス
'====================================================
'DAO 3.6 Object Lib を参照設定します
'VBの開発環境でクラスモジュールに Log という名前で保存します
'ログをアクセスのレコードに追加して、MaxRecLen に指定されている数を超えると古いものから削除されます
'c:\log.mdbというファイルを作成し、logTableというテーブルを追加します
'以下のようなテーブルデザインにします
'
'logTable : テーブル
'_________________________
'| フィールド名 | データ型 |
'-------------------------
'| num | 通貨型 |←キーにしてもよい
'| optime | テキスト型 |
'| status | テキスト型 |
'| msg | テキスト型 |
'| opt | テキスト型 |
'-------------------------
'
'使用方法
'Dim logObj As New Log
'Call logObj.addLog("status","msg","opt")'ログに追加
'Set logObj = Nothing
'=====================================================
Option Explicit
Private filename As String 'ファイル名
Const tableName As String = "logTable"
Const MaxRecLen As Integer = 10000
Dim MyDB As Database
'コンストラクタ
Private Sub Class_Initialize()
filename = App.Path & "\log.mdb"
End Sub
'ログの追加をします
Public Sub addLog(status As String, msg As String, opt As String)
On Error Resume Next
Call Connect 'データベースへの接続
'--------------レコードの追加---------------
Dim num As String
num = CStr(MaxNo() + 1)
'Debug.Print num
MyDB.Execute "INSERT INTO " & tableName & " (num,optime,status,msg,opt) VALUES ('" & num & "','" & Now & "','" & status & "','" & msg & "','" & opt & "');"
Call deleteData 'レコード数が MaxRecLen を超えた場合は古い順に削除
Call UnConnect 'データベースの切断
On Error GoTo 0
End Sub
'データベースへの接続
Private Sub Connect()
On Error GoTo start
start:
Set MyDB = OpenDatabase(filename) 'データーベースファイルのオープン、フルパスの指定が必要
On Error GoTo 0
End Sub
'データベースの切断
Private Sub UnConnect()
MyDB.Close
Set MyDB = Nothing
End Sub
'レコード数が MaxRecLen を超えた場合は古い順に削除
Private Sub deleteData()
Dim count As Integer
count = MyDB.OpenRecordset(tableName).RecordCount 'レコードの総数を出す
Dim strSQL As String
strSQL = " DELETE *"
strSQL = strSQL & " From " & tableName
strSQL = strSQL & " WHERE (((num)=(SELECT Min(num) AS MinNo FROM " & tableName & ")));"
If count > MaxRecLen Then
Dim i As Integer
For i = 1 To count - MaxRecLen
MyDB.Execute strSQL
Next i
End If
End Sub
'現在のlogTable.numの最大値を返します
Private Function MaxNo() As Currency
On Error GoTo err
Dim RecPos As Recordset
Set RecPos = MyDB.OpenRecordset("SELECT * FROM " & tableName & " WHERE (((num)=(SELECT MAX(num) AS MinNo FROM " & tableName & ")));")
MaxNo = RecPos![num]
RecPos.Close
Set RecPos = Nothing
errEnd:
On Error GoTo 0
Exit Function
err:
MaxNo = 0
GoTo errEnd
End Function