Zur Hauptseite ... Zum Onlinearchiv ... Zum Abonnement ... Zum Newsletter ... Zu den Tools ... Zum Impressum ... Zum Login ...

Achtung: Dies ist nicht der vollständige Artikel, sondern nur ein paar Seiten davon. Wenn Sie hier nicht erfahren, was Sie wissen möchten, finden Sie am Ende Informationen darüber, wie Sie den ganzen Artikel lesen können.

Kompletten Artikel lesen?

Einfach für den Newsletter anmelden, dann lesen Sie schon in einer Minute den kompletten Artikel und erhalten die Beispieldatenbanken.

E-Mail:

Gedrucktes Heft

Diesen Beitrag finden Sie in Ausgabe 1/2004.

Unser Angebot für Sie!

Lesen Sie diesen Beitrag und 500 andere sofort im Onlinearchiv, und erhalten Sie alle zwei Monate brandheißes Access-Know-how auf 72 gedruckten Seiten! Plus attraktive Präsente, zum Beispiel das bald erscheinende Buch 'Access 2010 - Das Grundlagenbuch für Entwickler'!

Diesen Beitrag twittern

Access-FAQ: Rund um Access

Karl Donaubauer, Wien

In der Access-FAQ von Karl Donaubauer (www.donkarl.com) finden Sie die meistgestellten Fragen und Anworten zum Thema Microsoft Access. In dieser Beitragsreihe stellt Karl Donaubauer die wichtigsten Einträge im Detail vor und zeigt Ihnen entsprechende Lösungen anhand praxisnaher Beispiele. Im zweiten Teil lernen Sie die Lösungen zu den häufigsten Problemen der Teilnehmer der deutschsprachigen Access-Newsgroups zu verschiedenen Themen rund um die Handhabung der Access-Datei als Ganzes kennen.

Schließen der Datenbank
verhindern/kontrollieren

Access bietet vielfältige Möglichkeiten, beim Starten einer Datenbank Einstellungen vorzunehmen. Das war das Hauptthema des ersten Teils dieser Artikelserie. Oft möchte man aber auch beim Schließen einer Datenbank Aktionen durchführen beziehungsweise das Schließen verhindern, solange nicht eine bestimmte Aktion durchgeführt wurde. Leider sieht Access kein Ereignis vor, das beim Schließen der Datenbank ausgelöst wird. Weder gibt es ein Autoexec-Makro noch Options-Einstellungen wie für das Starten. Daher behilft man sich eines Workarounds.

Man kann und sollte dem Benutzer eine Möglichkeit zum kontrollierten Beenden der Datenbankanwendung geben, wie zum Beispiel eine selbst programmierte Beenden-Schaltfläche. Damit hat man aber leider keine Garantie, dass der Anwender diesen Weg auch geht, denn dank Windows gibt es verschiedene Varianten, um Fenster zu schließen und Anwendungen zu beenden. Er kann das Schließen-Symbol oder den Schließen-Menüpunkt in der Titelleiste des Datenbank- oder Access-Fensters ebenso verwenden wie die Windows-Tastenkombinationen Alt + F4 (schließen der aktuellen Anwendung) und Strg + F4 (schließen des aktuellen Fensters) oder gar den Windows-Taskmanager.

Der Workaround, mit dem man den Moment des Schließens/Beendens sicher erwischt, sieht folgendermaßen aus: Man öffnet beim Start der Datenbank ein unsichtbares Formular. Dieses Formular bleibt im Hintergrund ständig offen, während die Datenbank benutzt wird. Wenn der Anwender irgendwann die Datenbank schließt, treten unweigerlich die Ereignisse Beim Entladen und Beim Schließen des versteckten Formulars ein. Für diese beiden Ereignisse können Sie Code hinterlegen, der beim Schließen der Datenbank ausgeführt werden soll.

Wenn Sie beispielsweise sicherstellen möchten, dass der Benutzer die Datenbank nicht schließen kann, ohne noch eine bestimmte Aktion oder Eingabe zu machen, erstellen Sie zunächst ein Formular namens frmKontrolle. Legen Sie als einziges Steuerelement des Formulars ein Kontrollkästchen chkKontrolle mit dem Standardwert Falsch an. Hinterlegen Sie die folgende Prozedur für die Ereigniseigenschaft Beim Entladen des Formulars:

If Me!chkKontrolle = False Then _
    Cancel = True

'Öffnen einer weitere Datenbank mit Fokus

Shell "C:\Pfad\MSAccess.exe C:\Pfad\Weitere.mdb", _
    vbNormalFocus 

DoCmd.Quit 'Beenden der aktuellen Instanz von Access

Quellcode 1

Abb. 1: Das untere Formular frmKontrolle ist hier nur ausnahmsweise sichtbar geschaltet.

Dieses Abbrechen des Entladens verhindert das Schließen der Datenbank und damit das Beenden von Access.

Wenn die Bedingung zum Schließen der Datenbank erfüllt ist, setzen Sie das Kontrollkästchen auf Wahr:

Forms!frmKontrolle!chkKontrolle = True

Damit kann das unsichtbare Formular entladen und die Datenbank beziehungsweise Access geschlossen werden. Das Kontrollformular wird durch das Ereignis Beim Öffnen des Startformulars per VBA geöffnet. Das unsichtbare Öffnen besorgt der letzte Parameter in folgender Code-Zeile:

DoCmd.OpenForm "frmKontrolle", , , , , acHidden

Eine andere Variante ist das Öffnen im Autoexec-Makro mit der ÖffnenFormular-Aktion und der Einstellung Fenstermodus: Ausgeblendet.

Hinweis

Auf der Begleit-CD finden Sie eine kleine Beispiel-Datenbank für Access 97 (FAQ97.mdb) und Access 2000 und höher (FAQ00.mdb) mit den soeben beschriebenen Beispielen. (

Das Startformular frmEingabe verlangt eine bestimmte Eingabe durch den Anwender, damit er die Datenbank wieder schließen kann
(s. Abb. 1).

Dieses Vorgehen bietet keine hundertprozentige Sicherheit. Fälle, die es nicht abdeckt, sind Abstürze von Access oder von Windows, Netzwerkunterbrechungen, Netzkabelziehen und Ähnliches. Daran sollten Sie denken, wenn Sie wichtige Vorgänge mit dieser Methode steuern.

Ein häufiger Anwendungsfall ist zum Beispiel eine selbst erstellte User-Verwaltung, bei der der Anwender mit dem Schließen des versteckten Formulares ausgeloggt wird. Bei einem Absturz findet das nicht statt. Darauf muss die selbst erstellte User-Verwaltung vorbereitet sein.

Weitere Datenbank per Code öffnen

Access kann gleichzeitig immer nur eine Datenbank pro Hauptfenster sichtbar geöffnet haben. Öffnet man eine weitere Datenbank, beispielsweise durch einen Doppelklick im Windows-Explorer, so wird dafür eine neue, zusätzliche Instanz von Access geöffnet.

Das ist bei modernen Computern mit viel Arbeitsspeicher zum Glück kein solches Problem mehr wie noch vor ein paar Jahren.

Mit dem Beispiele-Code aus Quellcode 1 öffnet man eine weitere Datenbank in einer neuen Instanz von Access und schließt die aktuelle.

Sub procDelObj1()

    On Error GoTo Error_procDelObj

    ' andere Datenbank per DAO öffnen

    Dim db As DAO.Database

    Set db = DBEngine.Workspaces(0). _
        OpenDatabase("c:\Pfad\DieAndere.mdb")

    ' Tabelle oder Abfrage löschen

    'db.TableDefs.Delete "MeineTabelle"

    ' oder db.QueryDefs.Delete "MeineAbfrage"

Exit_procDelObj:

    ' Variablen expl. freigeben und Prozedur verlassen

    db.Close: Set db = Nothing

    Exit Sub

Error_procDelObj:

    ' Fehlermeldung ausgeben und mit Aussprungmarke

    ' fortsetzen

    Msgbox "Fehler Nr. " & Str(err.Number) & " " _
        & err.Description

    Resume Exit_procDelObj

End Sub

Quellcode 2

Sub procDelObj2()

    On Error GoTo Error_procDelObj

    ' neue Access-Instanz öffnen

    Dim appAcc As Access.Application

    Set appAcc = New Access.Application

    ' andere DB öffnen und Objekt löschen

    appAcc.OpenCurrentDatabase "c:\...\DieAndere.mdb"

     appAcc.DoCmd.DeleteObject acReport, "MeinBericht"

    ' oder appAcc.DoCmd.DeleteObject acform, _
        "MeinFormular"

Exit_procDelObj:

    ' Access-Instanz schließen, Speicher freigeben und 
    ' Prozedur verlassen

    appAcc.Quit

    Set appAcc = Nothing

    Exit Sub

Error_procDelObj:

    ' Fehlermeldung ausgeben

    Msgbox "Fehler Nr. " & Str(err.Number) & " " _
        & err.Description

    Resume Exit_procDelObj

End Sub

Quellcode 3

Komplizierter wird es, wenn man die zweite Access-Instanz vermeiden möchte. Der Menüpunkt Datei/Datenbank öffnen kann das zwar ohne Problem, aber Microsoft hat keine programmatische Variante für diese Aktion vorgesehen.

Sie haben das Ende des frei verfügbaren Teils des Artikels erreicht. Lesen Sie weiter, um zu erfahren, wie Sie den vollständigen Artikel lesen und auf viele hundert weitere Artikel zugreifen können.

Sind Sie Abonnent?Jetzt einloggen ...
 

Kompletten Artikel lesen?

Einfach für den Newsletter anmelden, dann lesen Sie schon in einer Minute den kompletten Artikel und erhalten die Beispieldatenbanken.

E-Mail:

© 2003-2015 André Minhorst Alle Rechte vorbehalten.