1

嘿伙计们,我需要一些帮助。我的任务是执行一个商业智能项目,其中第一步是记录用户的进出日期和时间。所以我有三个模块: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

`
4

1 回答 1

1

我在这方面更进了一步。我能够打开另一个 Windows 映像,因此可以打开数据库的第二个快照。当我同时打开两个快照时,它会记录两者的进入时间,但是当关闭第一个快照时,它会降低 SessID 的值。我意识到保持打开状态的快照无法再访问 SessID 的值,因为它现在为空。仍然需要一些帮助家伙

于 2013-07-01T12:29:33.967 回答