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

È stato utile?

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
.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top