VBA Tipp: Verweilzeit in der Datenbank ermitteln

Aus DBWiki
Wechseln zu: Navigation, Suche

Aufgabenstellung

Ich möchte feststellen, wann in einer Datenbank nicht mehr gearbeitet wird, d.h. ob keine Datensätze mehr bearbeitet werden.

Lösung

Dazu kann man sich der undokumentierten DAO-Funktion ISAMStats bedienen. Sie ermittelt statistische Zahlen, wie oft Daten physisch in die MDB geschrieben/aus ihr gelesen werden und wie oft auf den Cache zugegriffen wird.

Der folgende Code kann z.B. in ein verstecktes Formular in der Datenbank kopiert werden:

Option Explicit
 
Const cLimit = 20
Private lStat As Long, iCnt As Long, lStatOld
 
Private Sub Form_Load() 'ISAMStats initialisieren
  Me.TimerInterval = 10000  '...Timer auf 10000 gestellt
  lStat = DAO.DBEngine.ISAMStats(1, True)  'ISAM Writes
  lStat = DAO.DBEngine.ISAMStats(2, True)  'ISAM Cache
End Sub
 
Private Sub Form_Timer()
  iCnt = iCnt + 1
  lStat = DAO.DBEngine.ISAMStats(1) + DAO.DBEngine.ISAMStats(2)  'ISAM Writes+Cache
  If Abs(lStat - lStatOld) > cLimit Then iCnt = 0
  lStatOld = lStat
  If iCnt > 10 Then
     MsgBox "Inaktivität festgestellt!" '...oder hier andere Aktion ausführen
     iCnt = 0
  End If
End Sub

Erläuterung

Das Zeitgeberintervall des Formulars ist im Beispiel auf 10000 (10 Sekunden) gestellt.

Wenn keine Datensatzänderungen in der Datenbank geschehen, so gibt die ISAMStats-Funktion jedesmal den gleichen Wert zurück. In diesem Fall wird der Zähler iCnt erhöht. Wenn er einen bestimmten Wert erreicht hat, so öffnet sich die Meldung zur Inaktivität. An dieser Stelle kann man natürlich alternativen Code ausführen lassen wie z.B. die Anweisung DoCmd.Quit, was die Datenbank schließt.

Wie sensibel auf Datensatzänderungen reagiert wird, lässt sich mit der Konstanten cLimit einstellen. Damit muss man etwas experimentieren.