سؤال

لدي قاعدة بيانات 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
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top