Forzare una chiusura pulita delle forme prima di accedere
-
21-12-2019 - |
Domanda
Ho un database di accesso 2010 che utilizza un modulo frmTimeKeeper
per tenere traccia degli utenti nel database. La forma è una larghezza di 0, quindi non può essere visto. È il primo modulo aperto quando il database si apre e si chiude quando l'accesso si chiude. Ha 2 eventi, aperto e chiudi:
Private Sub Form_Close()
DoCmd.SetWarnings False
DoCmd.RunSQL "UPDATE tblUserLogs SET timeOut=#" & Date & " " & time() & "# WHERE id=" & UserLogID
DoCmd.SetWarnings True
MsgBox "time keeper close"
End Sub
Private Sub Form_Open(Cancel As Integer)
DoCmd.SetWarnings False
DoCmd.RunSQL "INSERT INTO tblUserLogs(user, timeIn) VALUES ('" & Environ("Username") & "',#" & Date & " " & time() & "#)"
DoCmd.SetWarnings True
Dim rst As DAO.Recordset
Set rst = CurrentDb.OpenRecordset("SELECT TOP 1 * FROM tblUserLogs WHERE user='" & Environ("Username") & "' AND timeOut IS NULL ORDER BY id DESC")
UserLogID = rst(0)
DoCmd.OpenForm "frmLogin"
End Sub
.
UserLogID
è un Vartabile Global
Essenzialmente si apre la forma (quando il DB si apre) e scrive su tblUserLogs
il nome utente e l'ora della data. Quindi, quando il database è chiuso la chiusa Sub scrive su quella stessa registrazione utilizzando UserLogID
per garantire il suo record giusto. E funziona alla grande fino a quando non utilizzo un pulsante su un altro modulo che esegue il comando DoCmd.Quit acQuitPrompt
che chiude il DB. Quando ciò accade, non c'è timeOut
immesso per quel record. Sono stato in grado di ottenere un MSGBox per apparire dall'evento Form_Close
in FRMTimekeeper se è prima dell'istruzione SQL ma non quando è dopo l'istruzione SQL. C'è un modo in cui posso far chiudere tutte le altre forme prima di modificare l'accesso?
tblUserLogs
per riferimento:
ID user timeIn timeOut
2 Evan 7/29/2014 3:41:58 PM 7/29/2014 3:42:11 PM
3 Evan 7/29/2014 3:42:50 PM 7/29/2014 3:42:57 PM
4 Evan 7/29/2014 3:43:10 PM 7/29/2014 3:43:22 PM
5 J 7/29/2014 3:45:06 PM 7/29/2014 3:46:35 PM
6 J 7/29/2014 3:46:57 PM 7/29/2014 3:47:20 PM
7 Evan 7/30/2014 7:16:43 AM 7/30/2014 7:17:49 AM
8 Evan 7/30/2014 7:36:56 AM 7/30/2014 7:38:56 AM
9 Evan 7/30/2014 10:42:36 AM 7/30/2014 10:42:42 AM
10 Evan 7/30/2014 10:51:56 AM 7/30/2014 10:52:06 AM
11 Evan 7/30/2014 10:55:07 AM
12 Evan 7/30/2014 11:05:25 AM 7/30/2014 11:05:42 AM
13 Evan 7/30/2014 11:06:00 AM
14 Evan 7/30/2014 11:07:20 AM
15 Evan 7/30/2014 11:08:21 AM
16 Evan 7/30/2014 11:14:42 AM
17 Evan 7/30/2014 11:17:50 AM 7/30/2014 11:18:02 AM
18 Evan 7/30/2014 11:19:28 AM
19 Evan 7/30/2014 11:23:06 AM 7/30/2014 11:23:08 AM
20 Evan 7/30/2014 11:23:55 AM 7/30/2014 11:24:22 AM
.
I valori di timeOut
mancanti sono a causa di questo errore
Grazie
Soluzione
Nel clic del pulsante del pulsante che chiama Docmd.quit chiudere manualmente il modulo di cronometrista.Come,
Private Sub yourOtherButtonName_Click()
DoCmd.Close acForm, "frm_TimeKeeper"
DoCmd.Quit
End Sub
.