2017-01-31 5 views
0

Ich erstelle eine Access DB, die alle 300 Sekunden automatisch über ein Makro aktualisiert werden muss. Das Formular enthält zwei Textfelder genannt: 1) REFRESH_INTERVAL (hier das Intervall geändert werden kann) 2) COUNTER (dieses Feld sollte der Countdown)Countdown-Timer in MS-Access

zeigen Wenn die DB geöffnet wird, die MACRO (M_RUN alle Makros) sollte das erste Mal laufen. Wenn fertig ist, muss der Countdown gestartet werden. Sobald es 0 erreicht hat, sollte das Makro (M_RUN ALL MACROS) erneut laufen. Sobald der Vorgang abgeschlossen ist, sollte der Countdown nach 300 Sekunden erneut gestartet werden und der Vorgang sollte sich wiederholen. Wenn das Feld REFRESH_INTERVAL geändert wird, sollte der Countdown an dieser Nummer beginnen.

Wenn Sie mehrere Stücke von Tipps gefunden haben, die das Web überprüfen, aber es nicht geschafft haben, die Teile zu einem Arbeitsstück zu passen. Wer kann helfen?

+0

Sie werden sich das OnTimer-Ereignis des Formulars ansehen. Microsofts offizielle Seite dafür nervt, diese Seite gibt zumindest ein funktionierendes Beispiel: http://www.blueclaw-db.com/access_event_programming/timer.htm –

+0

Habe den Einschalttimer mit einem Intervall von 5 Minuten arbeiten lassen. Ich möchte jedoch den Countdown im Formular anzeigen lassen. Deshalb habe ich 2 Textfelder erstellt, um es anzuzeigen und um die Intervallzeit anzupassen (wenn nötig). –

Antwort

0

Bei dieser Antwort wird davon ausgegangen, dass Sie die Benutzereingabe in Bezug auf das Timer-Ereignis abrufen können. Was ich vorschlage, ist, dass Sie ein Timer-Ereignis auf die Frequenz setzen, die Ihr Countdown-Timer aktualisieren soll. Mit öffentlichen Variablen können Sie eine laufende Summe der verstrichenen Intervalle behalten, und wenn diese kumulative Zeit das Aktualisierungsintervall überschreitet, führen Sie Ihr Makro aus und setzen Sie die öffentliche Variable zurück, wobei Sie die kumulative Zeitsumme verfolgen. Ich habe die Aktualisierungsrate auf 1 Sekunde eingestellt, aber je nachdem, was Sie tun, kann dies für Benutzer, die versuchen, mit anderen Formen zu interagieren, wirklich störend sein.

Im Grunde erstellen Sie hier ein Ereignis, um das Zeitgeberintervall festzulegen (standardmäßig 1 Sekunde (1000 Millisekunden) und die Gesamtanzahl der Sekunden festzulegen, bis zu der das Makro ausgeführt werden soll).

auch ein AfterUpdate Ereignis auf Ihrem REFRESH_INTERVAL Textbox wird ausgeführt, wenn der Benutzer das Aktualisierungsintervall zu ändern entscheidet.

Endlich ein Form_Timer Ereignis, das vergangene Zeit überwacht und wird das Makro und den Timer zurückzusetzen, wenn die kumulative Zeit übertrifft laufen die REFRESH_INTERVAL.

Option Compare Database 
Public lTimer As Long 
Public lTimeTotal As Long 


Private Sub Form_Load() 
If IsNull(Me.REFRESH_INTERVAL) Then 
    Me.TimerInterval = 1000 
    Me.lTimeTotal = 300000 
Else 
    Me.TimerInterval = Me.REFRESH_INTERVAL * 1000 
End If 

End Sub 

Private Sub Form_Timer() 

lTimer = lTimer + Me.TimerInterval 

If lTimer >= lTimeTotal Then 
    DoCmd.RunMacro "M_RUN ALL MACROS" 
    Me.COUNTER = 0 
    Me.COUNTER = lTimeTotal/1000 & " Seconds Remaining..." 
Else 
    Me.COUNTER = Int((lTimeTotal - lTimer)/1000) & " Seconds Remaining..." 
End If 
DoEvents 
End Sub 


Private Sub REFRESH_INTERVAL_AfterUpdate() 
lTimeTotal = Me.REFRESH_INTERVAL * 1000 
End Sub