'====================================================
'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



▲トップページ > Visual BASIC と C#