2013-06-30 14 views
0

嗨,我需要一些幫助。我接受了一個商業智能項目的任務,其中第一步是記錄用戶的入口和出口日期和時間。所以我有三個模塊: modCaptureIns和modCaptureOuts;另外,當隱藏窗體frmCaptureOuts關閉時(在用戶關閉數據庫時),我在AutoExec宏和modCaptureOuts上運行了modCaptureIns函數RecordIns()。MS Access日誌記錄用戶網絡入口和出口時間

這是問題:當一個用戶打開和關閉數據庫入口和退出時間記錄在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

我更進一步與此有關。我能夠打開另一個Windows映像,因此可以打開另一個數據庫快照。當我同時打開兩個快照時,它會記錄兩個快照的入口時間,但當關閉第一個快照時,它將丟棄SessID的值。我意識到保持打開的快照不能再訪問SessID的值,因爲它現在爲空。仍然需要一些幫助傢伙