Принудительное закрытие форм перед закрытием доступа
-
21-12-2019 - |
Вопрос
У меня есть база данных Access 2010, которая использует форму frmTimeKeeper
отслеживать пользователей в базе данных.Сама форма имеет ширину 0, поэтому ее нельзя увидеть.Это первая форма, открывающаяся при открытии базы данных и закрывающаяся при закрытии доступа.У него есть 2 события: открытие и закрытие:
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
это глобальная переменная
По сути, форма открывается (когда открывается БД) и записывает в tblUserLogs
имя пользователя и дату и время.Затем, когда база данных закрывается, close sub записывает в ту же запись, используя UserLogID
чтобы гарантировать правильную запись.И это отлично работает, пока я не использую кнопку в другой форме, которая запускает команду DoCmd.Quit acQuitPrompt
который закрывает БД.Когда это произойдет, нет timeOut
введено для этой записи.Мне удалось вызвать появление msgbox из Form_Close
событие в frmTimeKeeper, если оно находится перед оператором SQL, но не после оператора SQL.Есть ли способ закрыть все остальные формы перед выходом из Access?
tblUserLogs
для справки:
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
Пропавшее timeOut
значения из-за этой ошибки
Спасибо
Решение
При нажатии кнопки, вызывающей DoCmd.Quit, вручную закройте форму timeKeeper.Нравиться,
Private Sub yourOtherButtonName_Click()
DoCmd.Close acForm, "frm_TimeKeeper"
DoCmd.Quit
End Sub