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