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
|