質問

フォームを使用している 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 はグローバル変数です

基本的に、フォームが開き (DB が開いたときに)、書き込みます。 tblUserLogs ユーザー名と日付時刻。次に、データベースが閉じられると、close sub は次のコマンドを使用して同じレコードに書き込みます。 UserLogID 正しい記録を確保するために。コマンドを実行する別のフォームのボタンを使用するまでは、うまく機能します。 DoCmd.Quit acQuitPrompt DBを閉じます。こうなったら無いよ timeOut そのレコードに入力されました。からmsgboxを表示させることができました。 Form_Close SQL ステートメントの前にある場合は frmTimeKeeper のイベントが発生しますが、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