Datenbank schließen mit Rückfrage

15.12.2006 von André Minhorst
Access bietet zwar die Möglichkeit, per Startoptionen direkt beim Start ein Formular zu öffnen oder ein Makro namens Autoexec automatisch auszuführen. Ein Pendant dazu für das Schließen der Datenbank sucht man jedoch vergeblich. inside Access zeigt, wie Sie die fehlende Funktion nachrüsten.

Es gibt viele Gründe für ein Ereignis, das beim Schließen einer Datenbankanwendung ausgelöst wird, etwa eine Abfrage, ob der Benutzer die Anwendung auch wirklich beenden möchte, oder eine Funktion, die mit dem Schließen der Anwendung automatisch einen Log-Eintrag erstellt, dass der Benutzer die Anwendung beendet hat. Eine hinlänglich bekannte und leicht zu realisierende Variante baut auf einem Formular auf, das beim Start der Anwendung geöffnet und sofort unsichtbar geschaltet wird. Diesem Formular gibt man den beim Schließen der Anwendung auszuführenden Code im Ereignis Beim Entladen mit. Der Clou ist, das Access vor dem Beenden alle Formulare ordnungsgemäß schließt – natürlich auch die unsichtbaren.

Um dies nachzuvollziehen, erstellen Sie einfach ein Formular namens frmUnsichtbaresFormular, dem Sie für das Ereignis Beim Entladen die Routine aus Listing 1 hinzufügen.

Private Sub Form_Unload(Cancel As Integer)
MsgBox "Unsichtbares Formular wird entladen"
End Sub

Bild 1: Dieses Makro öffnet beim Starten der Anwendung automatisch ein Formular und macht es unsichtbar.

Anschließend erstellen Sie ein Makro namens AutoExec und fügen zu diesem die Aktion Öffnen- Formular mit den Parametern aus Bild 1 hinzu. Nun müssen Sie nur noch die Datenbank schließen und wieder öffnen, damit das Formular im Hintergrund geladen ist. Wenn Sie die Anwendung nun erneut schließen, erscheint das Meldungsfenster aus dem Ereignis Beim Entladen.

Rückfrage vor dem Beenden

Ein Beispiel für den Einsatz dieser Funktion ist die Rückfrage, ob ein Benutzer die Anwendung wirklich schließen möchte. Falls nein, stellen Sie den Parameter Cancel der Ereignisprozedur Form_Unload auf True ein. Damit unterbinden Sie das Schließen des Formulars, und infolgedessen wird auch die Anwendung nicht geschlossen. Die passende Ereignisprozedur finden Sie in Listing 2.

Private Sub Form_Unload(Cancel As Integer)
If MsgBox("Wirklich beenden?", vbYesNo) = vbNo Then
Cancel = True
End If
End Sub

Fazit

Ein Problem bei dieser Vorgehensweise besteht darin, dass die Routine aus Listing 2 beim Aufrufen nicht weiß, ob tatsächlich das Beenden der Datenbank das Entladen des Formulars ausgelöst hat oder ob der Benutzer vielleicht irgendwie das Formular schließt.

Es gibt allerdings alternative Möglichkeiten, die ich Ihnen nicht vorenthalten will. Mehr dazu lesen Sie im Beitrag „Subclassing mit Access“.