嘿伙计们,我需要一些帮助。我的任务是执行一个商业智能项目,其中第一步是记录用户的进出日期和时间。所以我有三个模块:modCaptureIns 和 modCaptureOuts;此外,我在 AutoExec 宏上运行 modCaptureIns 的函数 RecordIns(),并且当名为 frmCaptureOuts 的隐藏表单关闭时(在用户关闭数据库时)运行 modCaptureOuts。
问题出在:当单个用户打开和关闭数据库时,进入和退出时间都记录在 tblInsNOuts 中。只要您有多个用户,第二个用户就会将 SessId 变量更改为不同的数字,然后不会记录退出时间。请帮我一把。任何帮助都感激不尽。
CF
`Option Compare Database
Option Explicit
Public SessID As Integer
Public Function RecordIns()
On Error GoTo ErrorHandler
Dim db As Database
Dim rs As Recordset
DoCmd.SetWarnings False
SessID = DFirst("[MaxOfSessionID]", "[qryMaxOfSessionID]") + 1
Set db = CurrentDb
Set rs = db.OpenRecordset("tblInsNOuts")
rs.AddNew
rs.Fields("SessionID") = SessID
rs.Fields("WinID") = GetUser()
rs.Fields("EntryStamp") = Now()
rs.Update
DoCmd.SetWarnings True
rs.Close
Set rs = Nothing
db.Close
ExitSub:
    Exit Function
ErrorHandler:
    MsgBox "Error " & Err.Number & ": " & Err.Description
    Resume ExitSub
End Function
Option Compare Database
Option Explicit
Public Function ExitStamp()
On Error GoTo ErrorHandler
Dim db As Database
Dim rs As Recordset
Dim fldEnumerator As Object
Dim fldColumns As Object
Set db = CurrentDb
Set rs = db.OpenRecordset("tblInsNOuts")
Set fldColumns = rs.Fields
DoCmd.SetWarnings False
While Not rs.EOF
    For Each fldEnumerator In rs.Fields
        If fldEnumerator.Name = "SessionID" Then
            If fldEnumerator.Value = SessID Then
                rs.Edit
                rs.Fields("ExitStamp") = Now()
                rs.Update
            End If
        End If
    Next
    rs.MoveNext
Wend
DoCmd.SetWarnings True
rs.Close
Set rs = Nothing
db.Close
ExitSub:
    Exit Function
ErrorHandler:
    MsgBox "Error " & Err.Number & ": " & Err.Description
    Resume ExitSub
End Function
Option Compare Database
Private Sub Form_Close()
    Call ExitStamp
End Sub
`