Creating a log table
If your database runs a regular process with multiple steps, and
you want to be able to track when the process was run, you need a
log to serve as an audit trail. By adding a timestamp field to the
log, you can work out which steps are slowing you down and optimise
them. A couple of years ago I used this log file to reduce a process
from over 30minutes to less than 5 minutes.
There are two alternative versions of the code below. One uses a
DAO recordset and the other uses a SQL statement, but both do the
same job, so make sure that you only copy one code sample. You will
need a table called tblLog, with these fields:
Field | Data Type | Comments |
---|---|---|
LogID | AutoNumber | |
LogEvent | Text (255) | |
LogProcess | Text (255) | |
CreateDate | Date/Time | Default value is =Now() |
Then copy either of these code samples to a module in your
database:
Option 1: Using a Recordset
To use DAO, you need to
set a reference to the Microsoft DAO 3.6
Library
Function WriteLog(strEvent As String, strProcess As String) Dim dbs As DAO.Database Dim rst As DAO.Recordset Set dbs = CurrentDb() Set rst = dbs.TableDefs("tblLog").OpenRecordset With rst .AddNew !LogEvent = strEvent !LogProcess = strProcess .Update .Close End With Set rst = Nothing Set dbs = Nothing End Function
Option 2: Using SQL
Function WriteLog(strEvent As String, strProcess As String) Dim sSQL As String sSQL = "INSERT INTO tblLog ( LogEvent, LogProcess ) " _ & "VALUES ('" & strEvent & "', '" & strProcess & "')" DoCmd.SetWarnings False DoCmd.RunSQL sSQL DoCmd.SetWarnings True End Function
Using the function
Whenever you want to log the start or end of a process you insert
a line into your code that writes out a log record. This snippet
gives an example:
Call WriteLog(" ", " ") 'This inserts a blank line in the log Call WriteLog("Start", "The name of your process") 'in here, put the process code -- 'example: DoCmd.OpenQuery "qrySomeQuery" Call WriteLog("End", "The name of your process")
There you go; a table with four fields and a simple function. I
hope you find it useful.