Print side | Luk vindue

Acc2013 - Auto idle user disconnect

Udskrevet fra: Dansk Access Forum
Kategori: Hjælp til Access
Forum navn: VBA / Makro
Forum beskrivelse: Spørgsmål vedr. den programmeringsmæssige del af Access
Web-adresse: https://www.accessforum.dk/forum_posts.asp?TID=122
Udskrevet den: 23-11-2024 kl. 10:37


Emne: Acc2013 - Auto idle user disconnect
Besked fra: Dallash
Emne: Acc2013 - Auto idle user disconnect
Posteringsdato: 02-02-2018 kl. 15:08

Hej DAF

 

Jeg har et problem ift. at jeg i min ACDB 2013 med ~50 aktive unikke brugere, gerne ville implementere en funktion. Håbet var at gøre således at efter 15 minutters inaktivitet kommer en besked op og advarer om at databasen snart lukker, samt at efter 20 minutters inaktivitet lukkes databasen.

 

Jeg har googlet mig frem og tilbage, men er desværre ret novice ift. SQL og VBA funktioner. Jeg har umiddelbart kunnet snuse mig frem til at gøre følgende:

 

1. Oprettet ny formular kaldet "DetectIdleTime".

Til denne ændrer jeg i formularens egenskabsark "HarModul" til ja. I "Vedtimerudløb" indsætter jeg følgende kode i kodegeneratoren og lukker derefter visual ned:

"Private Sub Form_Timer()
' IDLEMINUTES determines how much idle time to wait for before
         ' running the IdleTimeDetected subroutine.
         Const IDLEMINUTES = 15

         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


Sub IdleTimeDetected(ExpiredMinutes)
         'Dim Msg As String
         'Msg = "No user activity detected in the last "
         'Msg = Msg & ExpiredMinutes & " minute(s)!"
         'MsgBox Msg, 48
         
         DoCmd.OpenForm "frm_ExitNonUse"
         
      End Sub"
 
Og sætter herefter "Timerinterval" til 5000.
 
2. Opretter ny formular med navnet "frm_ExitNonUse"
 
Gør det samme med HarModul til ja.
 
Her tilføjer jeg et tekstfelt på den tomme formular side samt tilføjer en knap uden nogen funktion. Knappens navn ændrer jeg til "cmdOK" og ændrer titelteksten til "OK".
 
Så filføjer jeg følgende kode til funktionen VedKlik på knappen:
 
"Private Sub cmdOK_Click()
On Error GoTo Err_cmdOK_Click


    DoCmd.Close

Exit_cmdOK_Click:
    Exit Sub

Err_cmdOK_Click:
    MsgBox Err.Description
    Resume Exit_cmdOK_Click
    
End Sub"
 
Herefter sætter jeg formularens timer tid til 5000 og tilføjer følgende kode ligesom i punkt 1:
 
"Private Sub Form_Timer()
' IDLEMINUTES determines how much idle time to wait for before
         ' running the IdleTimeDetected subroutine.
         Const IDLEMINUTES = 5

         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

Sub IdleTimeDetected(ExpiredMinutes)
         'Dim Msg As String
         'Msg = "No user activity detected in the last "
         'Msg = Msg & ExpiredMinutes & " minute(s)!"
         'MsgBox Msg, 48
         
         Application.Quit acSaveYes
         
      End Sub"
 

3.  Jeg opretter nu en ny makro som jeg kalder "AutoExec". Jeg giver den funtkionen "ÅbnFormular", Formularvisning, "rediger" ved datatilstand og skjult vinduestilstand.

 

Nu burde det jf. guiden og sådan som jeg forstår det virke.

 

PROBLEM:

 

Problemet er at jeg, når jeg lader Access stå idle i 5 sekunder modtager en dialogboks med fejl. Se vedhæftede. Dette gør desværre, at intet af dette virker.

 

 

Håber I kan hjælpe.

 

 

 - Kilde til det jeg har foretaget indtil videre:

http://www.tek-tips.com/faqs.cfm?fid=1432




Print side | Luk vindue