RÉSUMÉ
Cet article vous montre comment créer une procédure qui s'exécutera si votre application Access ne détecte pas d'entrée d'utilisateur pour une période de temps spécifiée. Elle implique la création d'un formulaire masqué contenant du code qui conserve le nombre de périodes d'inactivité.
Remarque : à l'aide de ce code pour ajouter des enregistrements à une table lorsqu'une base de données est inactive peut entraîner une consommation excessive de la mémoire.
Comment faire pour créer le formulaire DetectIdleTime
Créez un formulaire vide qui n'est pas basé sur une table ou une requête, et nommez-le DetectIdleTime.
Définissez les propriétés de formulaire suivantes :
OnTimer: [Event Procedure]
TimerInterval: 1000
Remarque : le paramètre TimerInterval indique la fréquence (en millisecondes) l'application vérifie l'inactivité de l'utilisateur. La valeur 1000 correspond à 1 seconde.
Définissez la propriété OnTimer dans la procédure événementielle suivante :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57
|
Sub Form_Timer()
' IDLEMINUTES determines how much idle time to wait for before
' running the IdleTimeDetected subroutine.
Const IDLEMINUTES = 1
Static PrevControlName As String
Static PrevFormName As String
Static ExpiredTime
Dim ActiveFormName As String
Dim ActiveControlName As String
Dim ExpiredMinutes
On Error Resume Next
' Get the active form and control name.
ActiveFormName = Screen.ActiveForm.Name
If Err Then
ActiveFormName = "No Active Form"
Err = 0
End If
ActiveControlName = Screen.ActiveControl.Name
If Err Then
ActiveControlName = "No Active Control"
Err = 0
End If
' Record the current active names and reset ExpiredTime if:
' 1. They have not been recorded yet (code is running
' for the first time).
' 2. The previous names are different than the current ones
' (the user has done something different during the timer
' interval).
If (PrevControlName = "") Or (PrevFormName = "") _
Or (ActiveFormName <> PrevFormName) _
Or (ActiveControlName <> PrevControlName) Then
PrevControlName = ActiveControlName
PrevFormName = ActiveFormName
ExpiredTime = 0
Else
' ...otherwise the user was idle during the time interval, so
' increment the total expired time.
ExpiredTime = ExpiredTime + Me.TimerInterval
End If
' Does the total expired time exceed the IDLEMINUTES?
ExpiredMinutes = (ExpiredTime / 1000) / 60
If ExpiredMinutes >= IDLEMINUTES Then
' ...if so, then reset the expired time to zero...
ExpiredTime = 0
' ...and call the IdleTimeDetected subroutine.
IdleTimeDetected ExpiredMinutes
End If
End Sub |
Créez la procédure suivante dans le module du formulaire :
1 2 3 4 5 6
| Sub IdleTimeDetected (ExpiredMinutes)
Dim Msg As String
Msg = "No user activity detected in the last "
Msg = Msg & ExpiredMinutes & " minute(s)!"
MsgBox Msg, 48
End Sub |
Comment faire pour utiliser le formulaire DetectIdleTime
Pour masquer le formulaire DetectIdleTime lorsque l'application s'ouvre, créez la macro AutoExec suivante :
Macro Name Action
----------------------------
AutoExec OpenForm
AutoExec Action Arguments
----------------------------
OpenForm
Form Name: DetectIdleTime
View: Form
Filter Name:
Where Condition:
Data Mode: Edit
Window Mode: Hidden
Vous pouvez ajouter du code à la procédure IdleTimeDetected afin que la procédure s'exécute s’il n'y a aucune activité de l'utilisateur pendant la durée spécifiée dans la valeur de la constante IDLEMINUTES. Par exemple, vous pourrez quitter Access avec la procédure événementielle suivante :
1 2 3 4
|
Sub IdleTimeDetected (ExpiredMinutes)
Application.Quit acSaveYes
End Sub |
Cette procédure entraîne une fermeture de l'application, l'enregistrement de tous les objets sans afficher une boîte de dialogue.
Partager