Office Forum
www.Office-Loesung.de
Access :: Excel :: Outlook :: PowerPoint :: Word :: Office :: Wieder Online ---> provisorisches Office Forum <-
Access bei Inaktivität Schließen (Keine Usereingabe)
zurück: Kalenderformular mit Access-Bordmitteln weiter: Laufwerke / Ordner / Dateien Unbeantwortete Beiträge anzeigen
Neues Thema eröffnen   Neue Antwort erstellen     Status: Feedback Facebook-Likes Diese Seite Freunden empfehlen
Zu Browser-Favoriten hinzufügen
Autor Nachricht
Korben
Learning by Doing


Verfasst am:
17. Feb 2011, 12:20
Rufname: Thomas

Access bei Inaktivität Schließen (Keine Usereingabe) - Access bei Inaktivität Schließen (Keine Usereingabe)

Nach oben
       Version: Office 2003

Wie kann ich es verhindern, das User sich nicht abmelden (die Datenbank schließen)?

Als Datenbank-Admin hat man es oftmals nicht leicht mit seinen lieben Mitarbeitern. Sie sind teils so fleißig, dass sie vor lauter Arbeit vergessen ihre Datenbanken zu schließen und wir Admins dürfen dann schauen, wo der Rechner steht und und und.

Da ich mich mit diesem Problem schon eine Weile beschäftigt habe und nun (m)eine Lösung gefunden habe, die auch sehr zuverlässig arbeitet, dachte ich mir, dass ich sie euch ja mal vorstellen kann.

Vorab, den Code habe ich u.a. auf den MS-Seiten gefunden und etwas angepasst.

Evtl. kann ja jmd. von euch sowas brauchen.

Folgender Weg ist nur einer, man kann den Code nat. auch in ein Modul einfügen und vom Startformular aus auffrufen, wie man möchte.

1. erstellt ein ungebundenes Formular "frmDetectIdleTime"
Zeitgeberintervall:1000 (also jede Sekunde)
In das Formular kommt dann folgender Code:
Code:
Option Compare Database
Option Explicit

Sub Form_Timer()
    Const IDLEMINUTES = 5  'Zeit der Userinaktivität
    Static PrevControlName As String
    Static PrevFormName As String
    Static PrevReportName As String
    Static ExpiredTime
    Dim ActiveFormName As String
    Dim ActiveControlName As String
    Dim ActiveReportName 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
'Debug.Print ActiveFormName
    ActiveControlName = Screen.ActiveControl.Name
    If Err Then
        ActiveControlName = "No Active Control"
        Err = 0
    End If
'Debug.Print ActiveControlName
    ActiveReportName = Screen.ActiveReport.Name
    If Err Then
        ActiveReportName = "No Active Report"
        Err = 0
    End If
'Debug.Print ActiveReportName
    ' 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 PrevReportName = "" Or _
       ActiveFormName <> PrevFormName Or _
       ActiveControlName <> PrevControlName Or _
       ActiveReportName <> PrevReportName Then
        PrevControlName = ActiveControlName
        PrevFormName = ActiveFormName
        PrevReportName = ActiveReportName
        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
'***********ODER*********
'    Application.Quit acSaveYes
'***********ODER*********
    DoCmd.OpenForm "frmDetectIdleTimeHinweis"
End Sub
In der Sub Routine "IdleTimeDetected" kann man einstellen was nach der Zeit der Userinaktivität geschehen soll. Hier wird das Formular "frmDetectIdleTimeHinweis" geöffnet.

Dieses HinweisFormular beinhaltet:
1. Bezeichnungsfelder für Texte als Hinweis für den User, dass die DB geschlossen wird
2. Ein Textfeld "txtTimer" zum Herunterzählen
3. Ein Button "cmdCancel" zum Schließen des HinweisFormulars (Wenn der User doch aktiv ist und nur Kaffee trinkt und dabei liest Razz )
4. Zeitgeberintervall: 1000

In dieses Formular kommt nun folgender Code:
Code:
Option Compare Database
Option Explicit

Private Sub cmdCancel_Click()
    DoCmd.Close
End Sub

Private Sub Form_Load()
'Hier wird der Countdown Anfangswert eingestellt.
    Me!txtTimer = 10
End Sub

Private Sub Form_Timer()
'Hier zählt der Downcounter und wenn er 0 erreicht hat, wird _
 Access geschlossen.
    Me!txtTimer = Me!txtTimer - 1
    If Me!txtTimer = 0 Then
        DoCmd.Quit
    End If
End Sub
Ablauf:
Das Formular "frmDetectIdleTime" wird beim starten der DB im eigentlichen Startformular mitgeladen (Open_Ereignis)
z.B. so:
Code:
    DoCmd.OpenForm "frmDetectIdleTime", acNormal, , , , acHidden
Nun ermittelt die Routine jede Sekunde den Namen des aktiven Formulars, Steuerelements und Berichts und vergleicht ihn mit dem vorherigen Wert.
Bleiben die Werte über die IDLEMINUTES hinaus unverändert, wird das Hinweisformular geöffnet.
Dort läuft nun der HinweisTimer runter und nach Ablauf schließt die gesamte DB.

Viel Spaß beim Testen!

_________________
Mit freundlichen Grüßen Korben
***Rechtschreibfähler sind special effects meiner Tastatur! Wink***
derArb
getting better


Verfasst am:
17. Feb 2011, 13:38
Rufname: derArb
Wohnort: Berlin


AW: Access bei Inaktivität Schließen (Keine Usereingabe) - AW: Access bei Inaktivität Schließen (Keine Usereingabe)

Nach oben
       Version: Office 2003

Hallo,
problematisch ist aber, wenn es die Ereignisse 'Vor Aktualisieren' in einem offenen Formular gibt.gibt. Da wartet Access auf eine Aktion es User's bevor es schliesst.
Da musst Du mit dem Hammer kommen.
Code:
    Dim AccessKiller

    AccessKiller = Shell("taskkill /F /IM MSACCESS.exe", 1)

MfG
derArb

_________________
MfG
derArb

Scio me nihil scire...Εν οίδα οτι ουδέν οίδα... Ich weiss, dass ich nichts weiss (Sokrates)
Ich bevorzuge Beiträge mit korrekter deutscher Grammatik.
Korben
Learning by Doing


Verfasst am:
20. Feb 2011, 02:18
Rufname: Thomas

AW: Access bei Inaktivität Schließen (Keine Usereingabe) - AW: Access bei Inaktivität Schließen (Keine Usereingabe)

Nach oben
       Version: Office 2003

Korben - 17. Feb 2011, 23:45 hat folgendes geschrieben:
Hallo DerArb!
Danke für diesen Hinweis!
Ich werde das mal probieren und schauen, wie sich das da so verhält.
Ist mir bis jetzt noch nicht passiert, oder aufgefallen.

Hab das für mich jetzt so gemacht:
Code:
Private Sub Form_Timer()
' Hier zählt der Downcounter und wenn er 0 erreicht hat,
' wird Access geschlossen.
    Dim AccessKiller
   
    Me!txtTimer = Me!txtTimer - 1
    Select Case Me!txtTimer
      Case 0:        DoCmd.Quit
      Case Is < -15: AccessKiller = Shell("taskkill /F /IM MSACCESS.exe", 1)
      Case Else
    End Select
End Sub
So schaltet er nach 15 Sekunden vergeblichen schließens ab.
_________________
Mit freundlichen Grüßen Korben
***Rechtschreibfähler sind special effects meiner Tastatur! Wink***
derArb
getting better


Verfasst am:
20. Feb 2011, 14:54
Rufname: derArb
Wohnort: Berlin

AW: Access bei Inaktivität Schließen (Keine Usereingabe) - AW: Access bei Inaktivität Schließen (Keine Usereingabe)

Nach oben
       Version: Office 2003

Hallo,
jetzt solltest Du nur noch dafür sorgen, dass niemand sein Frontend wieder
öffnen kann, bis Du die BE wieder freigibst.
Das könnte man über ein Ja/Nein Feld machen.
MfG
derArb

_________________
MfG
derArb

Scio me nihil scire...Εν οίδα οτι ουδέν οίδα... Ich weiss, dass ich nichts weiss (Sokrates)
Ich bevorzuge Beiträge mit korrekter deutscher Grammatik.
Korben
Learning by Doing


Verfasst am:
21. Feb 2011, 10:15
Rufname: Thomas


AW: Access bei Inaktivität Schließen (Keine Usereingabe) - AW: Access bei Inaktivität Schließen (Keine Usereingabe)

Nach oben
       Version: Office 2003

Hi derArb!
Hm, das ist ein guter Gedanke, aber nicht meine Intention gewesen.
Es soll ja nur durch Inaktivität geschlossen werden. Der User darf ruhig wieder aufwachen und aktiv werden Razz. Für Wartungen am BE habe ich mir eine Extra DB angelegt, in der ich den Status aller DB´s auslesen kann. (offen oder nicht, welcher User ist angemeldet) Und kann von dort aus das Starten unterbinden, bzw. alle User nach einer bestimmten Zeit von den DBs trennen. (Dort findet auch das von dir angesprochene Ja/Nein-Feld Verwendung Smile )

Danke nochmal für den Hinweis!

_________________
Mit freundlichen Grüßen Korben
***Rechtschreibfähler sind special effects meiner Tastatur! Wink***
Neues Thema eröffnen   Neue Antwort erstellen Alle Zeiten sind
GMT + 1 Stunde

Diese Seite Freunden empfehlen

Seite 1 von 1
Gehe zu:  
Du kannst Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.
Du kannst Dateien in diesem Forum nicht posten
Du kannst Dateien in diesem Forum herunterladen

Verwandte Themen
Forum / Themen   Antworten   Autor   Aufrufe   Letzter Beitrag 
Keine neuen Beiträge Access Tabellen & Abfragen: Passwort drei Mal versuchen, dann Programm schließen 7 AndyW 1003 02. Sep 2011, 10:14
Zauberbaecker Passwort drei Mal versuchen, dann Programm schließen
Keine neuen Beiträge Access Formulare: Aktualisieren eines Formulars nach Schließen d Eingabemaske 7 SpEeDy66666 598 25. Okt 2007, 00:32
Willi Wipp Aktualisieren eines Formulars nach Schließen d Eingabemaske
Keine neuen Beiträge Access Formulare: verhindern dass bei formular schließen datensatz angefügt... 2 peterW_ 792 30. Aug 2007, 10:33
PeterW verhindern dass bei formular schließen datensatz angefügt...
Keine neuen Beiträge Access Formulare: Wieso muß ich das Formular zweimal schließen? 22 Liska 1514 21. Aug 2007, 15:09
Liska Wieso muß ich das Formular zweimal schließen?
Keine neuen Beiträge Access Formulare: Beim schließen des Formulars nichts mehr speichern? 3 Feuerpferd 400 04. Mai 2007, 09:17
jens05 Beim schließen des Formulars nichts mehr speichern?
Keine neuen Beiträge Access Formulare: Minimieren, Maximieren ,Schließen wegschalten! 2 rabie 1705 21. Feb 2007, 11:00
rabie Minimieren, Maximieren ,Schließen wegschalten!
Keine neuen Beiträge Access Formulare: Daten nach schließen eines Formulares gesperrt 1 Dave15 501 14. Dez 2006, 05:03
derArb Daten nach schließen eines Formulares gesperrt
Keine neuen Beiträge Access Formulare: Fehlermeldung beim Schließen des Formulars unterdrücken 9 Stefan1982 1523 01. Dez 2006, 10:13
Stefan1982 Fehlermeldung beim Schließen des Formulars unterdrücken
Keine neuen Beiträge Access Formulare: Geschütztes Excel Formular öffnen, bearbeiten und schließen 4 Gastschreiber 3648 29. Nov 2006, 11:33
steffen0815 Geschütztes Excel Formular öffnen, bearbeiten und schließen
Keine neuen Beiträge Access Formulare: Formular aus Listenfeld öffen, Formular mit LF schließen 1 Arkain 800 16. Okt 2006, 20:34
jens05 Formular aus Listenfeld öffen, Formular mit LF schließen
Keine neuen Beiträge Access Formulare: Formular und Abfrage mit einem Klick schließen 2 Krümel 791 12. Apr 2006, 10:15
Krümel Formular und Abfrage mit einem Klick schließen
Keine neuen Beiträge Access Formulare: Wenn Formular offen, dann schließen bei Buttonklick 2 kugelschreiber 3853 31. März 2006, 19:00
kugelschreiber Wenn Formular offen, dann schließen bei Buttonklick
 

----> Diese Seite Freunden empfehlen <------ Impressum - Besuchen Sie auch: HTML Editoren Forum