Access - fertig - los! - Teil 2

15.07.2006 von Lorenz  Hölscher
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. Das hat nebenbei den nicht zu unterschätzenden Vorteil, dass dieselbe Datenbank von mehreren Dateien aus gestartet werden kann, um unterschiedliche Einstellungen vorzugeben. Das geht allerdings nicht mit einem einzigen AutoExec-Makro.

Erstellen Sie in diesem Fall einen Link per Rechtsklick im Windows-Explorer und mit Hilfe des Menüs Neu Verknüpfung (Bild 1). Ein Assistent ermöglicht die Eingabe des Programmpfads sowie des Namens der Verknüpfungsdatei wie in Bild 2.

Bild 1: Einrichtung einer Startdatei für Access im Windows-Explorer.
Bild 2: Assistent für Dateiverknüpfung.

Als Speicherort geben Sie den kompletten Pfad zur Datei MSAccess.exe ein:

"C:\Office\MSACCESS.EXE"

Der Pfad muss natürlich demjenigen Ihrer Installation entsprechen. In dieser Form wird nur Access ohne Parameter gestartet.

Sie können noch weitere Parameter ändern, aber erst, wenn sie nachträglich auf der fertigen Verknüpfung mit Rechtsklick die Eigenschaften wie in Bild 3 anzeigen lassen. Dort ist sowohl die Fenstergröße unter Ausführen als auch die eigentliche Datenbank mit ihren Parametern unter Ziel einstellbar.

Bild 3: Eigenschaften- Dialog zu einer Dateiverknüpfung.

Geben Sie bei Ziel hinter dem Pfad zu MSAccess.exe ein Leerzeichen und den Pfad zu Ihrer Datenbank an, wobei alle Angaben immer ohne Zeilenwechsel stehen müssen:

"C:\Office\MSACCESS.EXE" "G:\ExpertsInside\Start.mdb"

Damit wird diese Datenbank sofort ohne Parameter gestartet.

Exklusiver Zugriff

Wenn Sie Änderungen an einer Datenbank vornehmen wollen, sollten Sie sicherstellen, dass nicht gleichzeitig ein anderer Nutzer Zugriff auf die gleiche Datenbank hat. Deshalb öffnen Sie diese am besten exklusiv, dann erhält jeder folgende Nutzer beim versuchten Zugriff eine Warnung wie in Bild 4 und kann die Datenbank nicht öffnen.

Bild 4: Warnung bei Zugriff auf exklusiv geöffnete Datenbank.

Um den exklusiven Zugriff mit einer Verknüpfung zu automatisieren, geben Sie als Parameter /excl an, also hier

"C:\Office\MSACCESS.EXE"

"G:\ExpertsInside\Start.mdb" /excl

In einer Mehrbenutzerumgebung muss dies natürlich die Ausnahme bleiben, denn alle anderen Nutzer können währenddessen nicht mit der Datenbank arbeiten.

Schreibgeschützte Datenbank

Weniger zur Entwicklung als vielmehr für das Nachschlagen von Daten können Sie eine Datenbank auch mit Schreibschutz öffnen. Dazu geben Sie als Parameter /ro für „read-only“ an, also hier

"C:\Office\MSACCESS.EXE"

"G:\ExpertsInside\Start.mdb" /ro

Beim Öffnen der Datenbank erhalten Sie die gleiche Warnung wegen der schreibgeschützten Datenbank, die Sie auch bekommen würden, wenn Sie im Explorer die Datei selber mit einem Schreibschutz-Attribut gesperrt hätten.

In diesem Zustand können Sie selbstverständlich keine geänderten Entwürfe speichern. Außerdem werden viele Datenbanken mit Auto-Exec-Makro oder automatischen Prozeduren beim Öffnen von Formularen oder Berichten vermutlich auch dauernd Laufzeitfehler auslösen, weil dort häufig Daten in Tabellen zwischengespeichert werden.

Komprimieren und reparieren

Mit den Parametern /compact und /repair lässt sich die genannte Datenbank komprimieren beziehungsweise reparieren. Dazu geben Sie die Parameter wie folgt an:

"C:\Office\MSACCESS.EXE"

"G:\ExpertsInside\Start.mdb" /compact /repair

Eine Reparatur kann nicht schaden, meiner Erfahrung nach ist sie seit Access 2.0 aber kaum noch notwendig.

Natürlich können Sie seit Access 2000 auch in den Optionen für die Datenbank einstellen, dass sie beim Schließen komprimiert werden soll. Diese Einstellung geschieht im Dialog Extras Optionen auf dem Register Allgemein mit der Checkbox Beim Schließen komprimieren. Es kann aber bei größeren Datenbanken mit wenigen Änderungen auf die Dauer schon sehr zermürbend werden, wenn bei jedem Schließen ein lang andauerndes Komprimieren stattfindet.

Manuell komprimieren

Alternativ ließe sich eine Datenbank auch manuell per Menü Extras/Datenbank-Dienstprogramme/Datenbank komprimieren und reparieren verkleinern. Aber versuchen Sie mal, das einem normalen Benutzer beizubringen!

Falls Sie bereits zu den Unglücklichen gehören, die schon versucht haben, ihren Benutzern ein Makro zum Komprimieren zur Verfügung zu stellen:

Komprimierung zentral starten

Um ehrlich zu sein: Eigentlich müssen Sie Ihre Benutzer gar nicht mit so komplizierten Aktionen belasten. Schließlich lässt sich eine solche Verknüpfung genauso gut über das Netzwerk oder zeitgesteuerte Windows-Tasks auslösen.

Da bei einer Mehrbenutzerumgebung sowieso von einem Netzwerk auszugehen ist, können Sie diese Verknüpfung einfach zentral beispielsweise um Mitternacht starten, ohne dass Ihre Benutzer sich jemals mit diesem Thema beschäftigen müssen.

Wenn zu diesem Zeitpunkt kein exklusiver Zugriff als Vorbedingung für das Komprimieren möglich ist, erscheint eine entsprechende Fehlermeldung. Andernfalls wird die Datenbank direkt komprimiert oder repariert.

Wenn Sie nach der Option /compact keine Zieldatenbank eingeben, wird die Originaldatenbank mit der komprimierten Datenbank überschrieben. Um der komprimierten Datenbank einen anderen Namen zu geben, geben Sie danach eine Zieldatenbank an. Wenn Sie für die Zieldatenbank keinen Pfad angeben, wird die Datenbank in Ihrem Ordner Eigene Dateien erstellt.

Arbeitsgruppen und Benutzer

Wenn Sie sich noch nicht mit Zugriffsrechten beschäftigt haben, wird Ihnen eine Arbeitsgruppendatei mit der Endung *.mdw wenig sagen. Darin sind Informationen zu Benutzer- und Gruppenkonten gespeichert. Solange Sie nichts dagegen tun, greift Access auf seine Standardarbeitsgruppendatei System.mdw zurück.

Das Zugriffsrechte-Konzept erfordert irgendwann aber immer, einen neuen Administrator mit beliebigem Namen und Passwort anzulegen und den bisherigen Admin zu löschen oder ihm wenigstens alle Rechte zu entziehen.

Aber dann meldet sich Access beim nächsten Start mit einem Dialog wie in Bild 5 und erzwingt die Anmeldung mit Name und Passwort. Doch Achtung: Access verlangt bereits das Passwort, nicht erst die Datenbank!

Bild 5: Anmeldung in einer gesicherten Datenbankumgebung.

Das hat zur Folge, dass Sie sich auf diesem Arbeitsplatz ab jetzt für jede Datenbank anmelden müssen. Das ist nicht nur lästig, sondern vor allem überflüssig. Der Fehler bestand hier bereits darin, nicht vorher die Arbeitsgruppe zu wechseln.

Arbeitsgruppe wechseln

Um also nicht Ihr komplettes Access zu sperren, legen Sie ab Access 2000 mit dem Menü

Extras/Sicherheit/Arbeitsgruppen-Administrator eine neue Arbeitsgruppe an. Das ist eine .mdw-Datei mit beliebigem Namen. Bis Access 97 gab es dafür ein eigenes Programm wrkgadm.exe, welches außerhalb von Access gestartet werden musste.

Der Dialog aus Bild 6 ermöglicht den Wechsel zwischen verschiedenen Arbeitsgruppen. Mit den Schaltflächen Erstellen oder Beitreten legen Sie eine neue Arbeitsgruppendatei wie Beispiel.mdw an oder öffnen eine vorhandene wie System.mdw.

Bild 6: Arbeitsgruppen-Administrator mit verbundener System-Datei.

Der Aufruf für die Dateiverknüpfung gibt entsprechend nicht nur die Datenbank-, sondern auch die Arbeitsgruppen-Datei an:

"C:\Office\MSACCESS.EXE" "G:\ExpertsInside\Start.mdb"

/wrkgrp "C:\Dokumente und Einstellungen\Admin\Anwendungsdaten\

Microsoft\Access\Beispiel.mdw"

Erst damit organisieren Sie die Zugriffsrechte brauchbar. Die Konto-Informationen stehen nun in Beispiel.mdw und müssen natürlich gegebenenfalls mit ausgeliefert werden. In dieser Arbeitsgruppe sind dem Standard-Admin alle Rechte entzogen worden, und deshalb fordert Access eine Anmeldung. Jede andere Datenbank in der normalen Arbeitsgruppe mit System.mdw aber lässt sich weiterhin ohne Anmeldung benutzen.

Benutzer angeben

Sie können bei einer solchen Arbeitsgruppen-Anmeldung auch direkt einen Benutzer mit dem Parameter /user und sogar sein Passwort mit /pwd übergeben. Da die Verknüpfungsdatei jedoch recht offen einsehbar ist, sollte sich das auf programmierinterne Aufrufe beschränken.

Start-Dialog ausblenden

Es gibt noch einige weitere Parameter, die eher von untergeordneter Bedeutung sind, etwa /nostartup. Damit können Sie Access ohne das Start-Dialogfeld öffnen. Dabei handelt es sich um die Liste der zuletzt geöffneten Dateien. Bis Access 97 war dies ein Dialog, seitdem ist es der Arbeitsbereich Neue Datei.

Ein Unterschied ist sowieso nur festzustellen, wenn Sie diesen Parameter ohne Datenbank aufrufen:

"C:\Office\MSACCESS.EXE" /nostartup

Den gleichen Effekt erzielen Sie, indem Sie mit Extras/Optionen auf der Registerkarte Ansicht die Checkbox Startaufgabenbereich leeren.

In andere Version konvertieren

Mit /convert können Sie eine Datenbank einer früheren Access-Version zu derjenigen der aktuellen Version konvertieren. Dabei muss die alte Datenbank vor dem Parameter /convert, die neue danach angegeben werden:

"C:\Office\MSACCESS.EXE"

"G:\Alt.mdb" /convert "G:\Neu.mdb"

Genau genommen wird nicht in die aktuelle Version konvertiert, sondern in das Standarddateiformat. Dieses ist auch für Access 2003 normalerweise immer noch dasselbe wie unter Access 2002/XP. Sie können das Standarddateiformat nachsehen und mit Extras/Optionen auf der Registerkarte Weitere ändern.

Profil nutzen

Nur der Vollständigkeit halber soll hier noch der Parameter /profile erwähnt werden. Mit Benutzerprofilen können beispielsweise die Standardeinstellungen der Jet4.0-Engine außer Kraft gesetzt werden.

Dazu müssen aber manuell einige Registry-Schlüssel geschrieben werden, was die Fehleranfälligkeit auch nach vielen übereinstimmenden Berichten in Newsgroups gravierend erhöht.

Makro beim Start ausführen

Die Datenbank kann parametergesteuert beim Start direkt ein Makro ausführen, wenn Sie nach /x und einem Leerzeichen den Namen des Makros angeben:

"C:\Office\MSACCESS.EXE"

"G:\ExpertsInside\Start.mdb" /x macTestMakro

Dann wird direkt das Makro macTestMakro gestartet, allerdings erst nach einem eventuell ebenfalls vorhandenen AutoExec-Makro.

Beliebige Parameter übergeben

Sicherlich der spannendste unter allen Parametern ist /cmd, denn er kann anschließend beliebige Zeichenfolgen an die geöffnete Datenbank übergeben. Er muss als letzter genannt werden, weil alles danach als Argument weitergereicht wird.

Sein Inhalt wird in VBA mit der Funktion Command() ermittelt. Um etwa den Namen der Abteilung zu übergeben, heißt der Aufruf:

"C:\Office\MSACCESS.EXE"

"G:\ExpertsInside\Start.mdb" /cmd Geschäftsleitung

Dann benötigen Sie ein AutoExec-Makro mit der Aktion AusführenCode und deren Argument =StartWithThis(), welches dadurch beim Start automatisch die VBA-Funktion StartWithThis wie in Listing 1 ausführt.

Function StartWithThis()
MsgBox "Dies wird automatisch gestartet!", _
vbInformation, CurrentDb.Name
If Len(Command()) = 0 Then
MsgBox "nix drin"
Else
MsgBox "Command: '" & Command() & "'!"
End If
End Function

Nach dem Hinweis auf den automatischen Start erfolgt entweder die Meldung mit dem Inhalt der Kommandozeile oder der Info, dass diese leer ist.

Aufruf bestimmter Formulare oder Berichte

Diese Technik eignet sich etwa zum Start verschiedener Formulare, die damit von außen aufgerufen werden können. Listing 2 zeigt, wie die von AutoExec automatisch aufgerufene Funktion StartWithThis geändert werden muss.

Function StartWithThis()
If Len(Command()) = 0 Then
MsgBox "nix drin"
Else
Select Case LCase(Command())
Case "artikel"
DoCmd.OpenForm "Artikel"
Case "kunden"
DoCmd.OpenForm "Kunden"
Case "lieferanten"
DoCmd.OpenForm "Lieferanten"
Case Else
MsgBox "Unbekanntes Formular?"
End Select
End If
End Function

Damit die Groß- und Kleinschreibung nicht berücksichtigt wird, muss die in Command() enthaltene Zeichenkette mit der Funktion LCase in Kleinbuchstaben umgewandelt werden. Wenn die Datenbank danach mit

"C:\Office\MSACCESS.EXE"

"G:\ExpertsInside\Start.mdb" /cmd Kunden

aufgerufen wird, erscheint automatisch das Formular Kunden.

Nur in VBA möglich

Eigentlich verspricht die Access-Hilfe, dass im deutschsprachigen Teil von Access, also in Abfragen, Formularen oder Berichten, statt Command() einfach Befehl() benutzt werden kann.

Immerhin wird bei der Eingabe von Test: Befehl() in einem Abfrage-Entwurf dieser Funktionsname auch sofort erkannt, übersetzt und in Test: Command() umgewandelt. Auch der Ausdrucks-Generator führt den Befehl[$] in seiner Liste der eingebauten Funktionen.

Aber sowohl in Abfragen als auch in Formularen oder Berichten führt das Ausführen zur Fehlermeldung „Undefinierte Funktion 'Command' in Ausdruck“. Es scheint, dass Access hier zumindest unfertig ist.

Dies fällt auch in der Access(!)-Hilfe zu Command() auf: "Gibt den Argument-Abschnitt der Befehlszeile zurück, die verwendet wird, um Microsoft Visual Basic [aufzurufen]." Weiter heißt es dort: „Die Command-Funktion aus Visual Basic ist in Microsoft Office-Anwendungen nicht verfügbar.“ Na ja, dafür funktioniert sie in Access-VBA erstaunlich gut.

Test in offener Datenbank

Wenn Sie bei bereits geöffneter Datenbank die Command-Funktion testen wollen, können Sie über Extras/Optionen auf der Registerkarte Weitere bei Befehlszeilenargumente einen eigenen Wert eintragen. Dieser wird jedoch beim nächsten Aufruf mit dem Parameter /cmd-überschrieben.

Auch wenn es selten vorkommt: Um in der Befehlszeile einen Schrägstrich oder ein Semikolon anzugeben, geben Sie das jeweilige Zeichen doppelt ein, also abc//d;;ef, wenn das tatsächliche Passwort abc/d;ef ist.