فرض إغلاق نظيف للنماذج قبل إنهاء الوصول
-
21-12-2019 - |
سؤال
لدي قاعدة بيانات Access 2010 والتي تستخدم نموذجًا frmTimeKeeper
لتتبع المستخدمين في قاعدة البيانات.النموذج نفسه له عرض 0 لذا لا يمكن رؤيته.وهو النموذج الأول الذي يتم فتحه عند فتح قاعدة البيانات وإغلاقه عند إغلاق الوصول.لديها حدثين، فتح وإغلاق:
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
اسم المستخدم والوقت والتاريخ.ثم عندما يتم إغلاق قاعدة البيانات، يكتب القسم الفرعي إلى نفس السجل باستخدام 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