Access - fertig - los! - Teil 1

15.06.2006 von Lorenz  Hölscher
Wenn Sie Ihre Datenbank einfach mit Doppelklick öffnen, mag das für viele Anwendungen ausreichen. Aber schon im Startvorgang von Access sind viele Möglichkeiten verborgen, die einen näheren Blick wert sind. Während dabei die Kommandozeilen-Parameter eine externe Datei voraussetzen, lässt sich das Verhalten auch über Einstellungen und Objekte in der Datenbank selber steuern.

Sicherlich die bekanntesten Startelemente einer Datenbank sind das AutoExec-Makro und der Dialog Extras Start.

Ein beliebiges Makro mit dem reservierten Namen AutoExec wird beim Öffnen einer Datenbank gesucht und ausgeführt. Von hier aus können dann weitere Aktionen erfolgen. Dazu gehören typischerweise

Insbesondere die automatische Anzeige eines Formulars zur Bedienung der Datenbank ist dann zwingend notwendig, wenn nur die Access- Runtime genutzt wird, da diese ja gar kein Datenbankfenster enthält.

Das Ausblenden des Datenbankfensters erfolgt leider erst nach dem Laden der Datenbank. Es ist also vorübergehend zu sehen, auch wenn das optisch lästig sein mag.

VBA-Code aufrufen

Der automatische Aufruf von VBA-Code direkt ist nicht möglich, dies muss immer vom AutoExec Makro aus erfolgen.

Dabei gilt auch hier die in Access weit verbreitete Merkwürdigkeit, dass solche Aktionen keineswegs per Subprozedur, sondern mit einer Funktion erfolgen, deren eventueller Rückgabewert aber nie ausgewertet werden kann. Dabei darf die Funktion nicht als private deklariert und keine Klasse, auch nicht in einem Formular oder Bericht, enthalten sein.

Startdialog

Die seit Access 97 vorhandene Alternative zum AutoExec-Makro ist der Dialog Extras Start. Darin können Sie nicht nur ein Start-Formular angeben und das Datenbankfenster verstecken, sondern auch die [F11]-Taste deaktivieren, wenn Sie mit der Schaltfläche Weitere die Option Access- Spezialtasten verwenden ausschalten.

Im Gegensatz zur AutoExec-Aktion AusführenBefehl bleibt das Datenbankfenster dabei von Anfang an verborgen und die [F11]-Taste wirkungslos. Das mag in der Runtime-Umgebung egal sein, weil dort ja ohnehin kein Datenbankfenster anzuzeigen wäre. In der normalen Entwicklungsumgebung hingegen haben Sie sich damit auch selber ausgesperrt.

Startmakros umgehen

Nun hat sich sicherlich längst herumgesprochen, dass sich die automatische Ausführung sowohl von AutoExec als auch der Extras Start-Einstellungen durch das Öffnen der Datenbank bei ausreichend lang gedrückter [Umschalt]-Taste verhindern lässt. Leider gilt das sowohl für Sie als auch für Ihre zukünftigen Datenbanknutzer!

Dieser Konflikt ließe sich erst mit Einsatz des umfangreichen Zugriffsrechte-Konzepts lösen, aber Sie können wenigstens die Hemmschwelle zur Anzeige der Datenbank-Interna deutlich höher legen: Die [Umschalt]-Taste ist der Aus- Schalter für AutoExec und Extras Start-Einstellungen. Also nutzen Sie einen Aus-Schalter für die [Umschalt]-Taste!

Problem bleibt eigentlich bestehen

Natürlich verlagern Sie das Problem nur eine Ebene höher, denn auch dieser Aus-Schalter lässt sich von jedem Benutzer deaktivieren. Aber der Weg dahin ist deutlich schwieriger, so dass gutwillige Benutzer ihn nicht so schnell finden.

Es gibt nämlich eine Eigenschaft AllowBypassKey, mit deren Einstellung True die gedrückte [Umschalt]-Taste beim Start ignoriert wird. Damit können Sie sicher sein, dass bei der Benutzung Ihrer Datenbank alle Startprozeduren ausgeführt wurden. Da die Eigenschaft in keinem Dialog sichtbar ist, lässt sie sich nur per VBACode umschalten. Erstellen Sie dazu in einem beliebigen Modul den Code aus Listing 1.

Sub ShiftNutzbar()
Beachte_Shift True
End Sub
Sub ShiftWirdIgnoriert()
Beachte_Shift False
End Sub
Sub Beachte_Shift(booErlaubt As Boolean)
Dim DB As Database
On Error GoTo Mist
Set DB = CurrentDb
DB.Properties("AllowBypassKey").Value = booErlaubt
Exit Sub
Mist:
If Err = 3270 Then ' Eigenschaft nicht vorhanden
DB.Properties.Append DB.CreateProperty("AllowBypassKey", _
dbBoolean, booErlaubt)
Resume Next
Else
MsgBox "Fehler Nr. " & Err.Number & " " & Err.Description
End If
End Sub

Das Umschalten erfolgt über die Prozedur ShiftNutzbar oder ShiftWirdIgnoriert, die Sie jeweils mit [F5] starten können. Um den Effekt prüfen zu können, benötigen Sie außerdem ein AutoExec-Makro wie in Bild 1 mit einer Aktion Meldung oder einem VBA-Funktionsaufruf, damit Sie merken, ob es ausgeführt wird. Die in Bild 1 aufgerufene VBA-Funktion ist in Listing 2 zu sehen.

Bild 1: AutoExec-Makro zum Testen.

Function StartWithThis()
MsgBox "Dies wird automatisch gestartet!", _
vbInformation, CurrentDb.Name
End Functio

Sie werden feststellen, dass mit AllowBypass- Key = True die AutoExec-Meldung auch dann angezeigt wird, wenn Sie beim nächsten Öffnen der Datenbank die [Umschalt]-Taste gedrückt halten. Und möglicherweise werden Sie auch feststellen, dass Sie sich damit in genau die gleiche missliche Lage wie vorher bugsiert haben: Falls in Extras Start das Datenbankfenster ausgeblendet und die Access-Spezialtasten deaktiviert wurden, sehen Sie nie wieder das Datenbankfenster dieser Datei. Pech gehabt?

Notausstieg

Na gut, Sie haben doch ein paar Chancen, die Datenbank wieder als Entwickler zu nutzen:

Mit [Alt]+[F11] beziehungsweise Extras Makro VBA-Editor lässt sich die Prozedur wenigstens direkt im VBA-Editor anzeigen und ausführen. Der Code sollte also tunlichst mit Passwort geschützt werden, sonst steht dieser Weg allen offen!

'weiterer Code wie oben
Function Shift_Start(Flag As Boolean)
Dim DB As Database
On Error GoTo Err_Shift_Start
Set DB = DBEngine.OpenDatabase("G:\Sonstige\Test.mdb")
DB.Properties!AllowBypassKey = Flag
'weiterer Code wie oben

Mit einer minimalen Änderung wie in Listing 3 lässt sich der Code auch auf eine fremde Datenbank anwenden. Sie können diese Eigenschaft also jederzeit von außen wieder zurückstellen. Auch dieser Weg steht übrigens allen offen!

Wie versprochen ist nun das „Abschließen“ der Datenbank komplizierter und damit etwas sicherer geworden. Aber solange ein Notausstieg besteht, ist auch hier ein „Knacken“ möglich.

Trotzdem ist dies eine gute Möglichkeit, einfache Umgehungsversuche Ihrer Startroutinen zu verhindern.

Wie geht es weiter?

Während die bisher gezeigten Techniken erst nach dem Öffnen der Datenbank aktiv werden, können Sie mit Startparametern deren Verhalten bereits vor dem Start bestimmen. Darum wird es im zweiten Teil des Artikels gehen.