嘿伙计我需要一些帮助。我的任务是商业智能项目,其中最初的步骤是记录用户的进入和退出日期和时间。所以我有三个模块: 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
`
答案 0 :(得分:0)
我更进了一步。我能够打开另一个Windows映像,因此可以打开数据库的第二个快照。当我同时打开两个快照时,它会记录两者的输入时间,但是当关闭第一个快照时,它会丢弃SessID的值。我意识到仍然打开的快照无法再访问SessID的值,因为它现在为空。仍需要一些帮助人员