Sie sind auf Seite 1von 73

Thomas Riehm Referat III A 2 LMU München

Access 2.0 für Fortgeschrittene

3., überarbeitete Auflage Februar 1997

© 1997 Thomas Riehm Thomas.Riehm@Jura.Uni-Muenchen.DE

Inhaltsverzeichnis

1. EINFÜHRUNG

1

1.1. Ein Wort zu Access 7.0 und Access 97

1

1.2. Kursziel

2

2. DIE BEISPIELDATENBANK

2

2.1. Aufgabenbeschreibung

3

2.2. Tabellenstruktur der Beispieldatenbank

3

2.3. Bereits erstellte Objekte

4

2.3.1. Formulare

4

2.3.2. Abfragen

5

2.3.3. Berichte

5

3. DAS ENTWERFEN VON ABFRAGEN (VERTIEFUNG)

6

3.1.

Kriterien in Abfragen

7

3.1.1. Wiederholung: Schlüsselwörter in Abfragekriterien

7

3.1.2. Kombination von Kriterien über mehrere Felder

8

3.2.

Besondere Beziehungen in Abfragen: Die Inventurliste

8

3.2.1. Selektieren aller niemals ausgeliehenen Bücher (Inklusionsverknüpfung)

9

3.2.2. Selektieren aller zurückgegebenen Bücher

11

3.3. Parameterabfragen

12

3.4. Berechnete Felder in Abfragen

14

3.5. Aktionsabfragen

14

3.5.1. Tabellenerstellungsabfrage

15

3.5.2. Aktualisierungsabfrage

16

3.5.3. Anfügeabfrage

17

3.5.4. Löschabfrage

17

3.6. Kreuztabellenabfragen

18

3.7. Zusammenfassung

20

4. VERTIEFUNG: FORMULARE UND BERICHTE

20

4.1. Das Eigenschaftenfenster

21

4.2. Die Palette

23

4.3. Steuerelemente

23

4.3.1. Textfelder

24

4.3.2. Kombinations- und Listenfelder

24

4.3.3. Optionsgruppen

26

II

Access 2.0 für Fortgeschrittene

4.3.5. Befehlsschaltflächen

27

4.3.6. Berechnete Felder in Formularen und Berichten

28

4.3.7. Domänenfunktionen

Die

29

4.3.8. Feldreihenfolge

Die

30

4.4.

Die wichtigsten Eigenschaften

31

4.4.1. Formulareigenschaften

31

4.4.2. Berichtseigenschaften

32

4.4.3. Bereichseigenschaften

33

4.4.4. Steuerelementeigenschaften

33

5. EINFÜHRUNG IN DIE MAKROPROGRAMMIERUNG

36

5.1. Was sind Makros?

36

5.2. Die

Makro-Entwurfsansicht

37

5.3. Die wichtigsten Aktionen

38

5.4. Bedingungen in Makros

42

5.4.1. Überprüfen, ob ein Buch schon ausgeliehen ist

43

5.4.2. Verwenden von Sicherheitsabfragen für Makros

43

5.4.3. Verwenden von Alternativbedingungen

44

6. PROGRAMMFLUßKONTROLLE

45

6.1. Starten der Anwendung

45

6.2. Das Makro „AutoExec“

46

6.3. Ereignisse

47

6.3.1.

Die wichtigsten Ereignisse

48

 

6.3.1.1. Formularereignisse

49

6.3.1.2. Berichtsereignisse

50

6.3.1.3. Steuerelementereignisse

50

6.3.2. Ereignisse und Makros

 

52

6.3.3. Ereignisprozeduren

52

6.4. Benutzerdefinierte Menüleisten

54

6.5. Arbeiten mit Symbolleisten

 

57

6.5.1. Standardsymbolleisten

verstecken

57

6.5.2. Benutzerdefinierte Symbolleisten

57

6.6.

Ändern der Tastaturbelegungen

58

7. BENUTZERVERWALTUNG

60

7.1. Grundprinzipien

60

7.2. Vergabe von Benutzerkennungen

61

7.3. Bestmögliche Datensicherheit

63

7.4. Vergabe von Rechten an Access-Objekten

63

Inhaltsverzeichnis

III

8. SCHMANKERL IN ACCESS

65

8.1. Eigenes „Outfit“ für die Anwendung

65

8.2. Anzeigen des Arbeitsfortschritts

66

8.3. Kontrolle über das Programmende

67

Abbildungsverzeichnis

Abbildung 1: Die Beziehungen in der Beispieldatenbank

3

Abbildung 2: Die Abfrage-Entwurfsansicht

6

Abbildung 3: Mehrere Kriterien über mehrere Felder

8

Abbildung 4: Dialogbox „Verknüpfungseigenschaften“

10

Abbildung 5: Die Abfrage „Inventurliste“

12

Abbildung 6: Erstellen einer Parameterabfrage

13

Abbildung 7: Abfrage eines Parameters

13

Abbildung 8: Berechnete Felder in einer Abfrage

14

Abbildung 9: Symbole für Aktionsabfragen

15

Abbildung 10: Tabellenerstellungsabfrage

15

Abbildung 11: Die Aktualisierungsabfrage „Pauschalverlängerung“

16

Abbildung 12: Löschen archivierter Daten

18

Abbildung 13: Der Entwurf einer Kreuztabellenabfrage

19

Abbildung 14: Kreuztabellenabfrage

20

Abbildung 15: Das Eigenschaftenfenster

21

Abbildung 16: Die Palette

23

Abbildung 17: Die Toolbox

24

Abbildung 18: Ein Textfeld

24

Abbildung 19: Optionsgruppe

26

Abbildung 20: Die Makro-Entwurfsansicht

37

Abbildung 21: Die Makrogruppe „Ausleihen“

42

Abbildung 22: Installation der Anwendung als eigenes Icon

46

Abbildung 23: Der Menü-Editor

55

Abbildung 24: Benutzereintrag verändern

62

Abbildung 25: Zuteilung einzelner Berechtigungen

64

Tabellenverzeichnis

Tabelle 1: Die wichtigsten Formulareigenschaften

31

Tabelle 2: Die wichtigsten Berichtseigenschaften

32

Tabelle 3: Die wichtigsten Bereichseigenschaften

33

Tabelle 4: Die wichtigsten Steuerelementeigenschaften

33

Tabelle 5: Die wichtigsten Aktionen in Makros

38

Tabelle 6: Die wichtigsten Formularereignisse

49

Tabelle 7: Die wichtigsten Steuerelementereignisse

51

1. Einführung

1

1. Einführung

Dieses Skript soll Sie durch den Kurs „Access 2.0 für Fortgeschrittene“ des Referats

III A 2 begleiten. Es kann natürlich kein Handbuch ersetzen und dient hauptsächlich

dazu, Ihnen das Nacharbeiten des Kursstoffes außerhalb der Kurszeiten zu erleich- tern.

Für wirkliches eigenständiges Arbeiten ist es natürlich auch unzulänglich; es ist sehr empfehlenswert, beim Erstellen eigener Datenbankanwendungen immer die Original- dokumentation von Microsoft bei der Hand zu haben. Darin ist ein eigener Band „Erstellung von Datenbankanwendungen“ enthalten, der einen großen Teil der hier vorgestellten Features beschreibt und darüberhinaus noch viel mehr Tips enthält, als in diesem Skript möglich war.

Das Skript ist die Fortsetzung meines Skripts zum Kurs „Access 2.0 für Einsteiger“, so daß dessen Inhalt hier vorausgesetzt wird (wobei es selbstverständlich genügt, wenn Sie sich das entsprechende Wissen selbst angeeignet haben). Das gilt besonders für die Fragen des Datenbankentwurfes und der Normalisierung der Tabellenstruktur,

die beim eigenständigen Erlernen von Access erfahrungsgemäß immer zu kurz kom-

men, und für die hier noch einmal dringend auf das Einsteigerskript verwiesen wird.

Die hier verwendete Beispieldatenbank zur Bibliotheksverwaltung wurde ebenfalls im Einsteigerskript entwickelt; sie wird jedoch unten im Abschnitt „Die Beispieldaten- bank“ auf Seite 2 noch einmal kurz dargestellt, um den Quereinstieg zu ermöglichen.

1.1. Ein Wort zu Access 7.0 und Access 97

Mir ist sehr wohl bewußt, daß Access 2.0 nicht mehr die aktuelle Version von Micro- soft Access ist. Inzwischen sind bereits die Versionen Access 7.0 (bzw. Access 95)

und Access 97 (derzeit noch im Beta-Stadium) auf dem Markt, die in vielen Bereichen umfassende Neuerungen (umfangreiche Assistenten, wesentlich bessere Unterstützung der Planungsphase, neuer Felddatentyp „Verweis“ für Fremdschlüssel, Programmier-

sprache Visual Basic statt Access Basic,

Dennoch wird in diesem Kurs allenfalls am Rande auf die neuen Versionen verwiesen, weil diese nur für die 32Bit-Betriebssysteme Windows 95 und Windows NT 4.0 verfügbar sind, die an der LMU bisher nur in sehr geringem Umfang eingesetzt wer- den. Wann der allgemeine Umstieg auf diese Betriebssysteme und damit diese Versio- nen von Access stattfinden wird, ist derzeit noch nicht absehbar, da der damit verbun- dene Wartungs- und Schulungsaufwand die aktuellen Kapazitäten des Ref. III A 2 bei weitem übersteigt.

Das hier vermittelte Wissen zu Access 2.0 ist aber ohne große Schwierigkeiten auch

auf die neuen Versionen übertragbar, da die Grundkonzepte des Programms gleich ge-

blieben sind. Auf gravierende Differenzen zwischen den Versionen wird im Rahmen des Kurses hingewiesen werden.

) gebracht haben.

2

Access 2.0 für Fortgeschrittene

1.2. Kursziel

Inhalt dieses Kurses ist der „Weg von der Datenbank zur Datenbankanwendung“. Unter einer Datenbankanwendung versteht man ein eigenständiges „Programm im Programm“, d.h. eine eigene Benutzeroberfläche mit eigenen Menüs und Dialogboxen, mit deren Hilfe eine Datenbank, die mit Access erstellt wurde, für andere Personen als den Datenbankentwickler (verschiedene Sachbearbeiter, Kollegen) bedienbar gemacht wird. Endziel ist daher das völlige Verstecken der Programmteile von Access; kein Anwender soll erst mühsam die Bedienung z.B. des Datenbankfensters oder der um- fangreichen Menüleisten von Access lernen müssen, bevor er eine einfache Datenbank wie z.B. ein Telefonverzeichnis bedienen kann.

Für den Kurs bedeutet das, daß davon ausgegangen wird, daß Sie bereits eine (ein- fache) Datenbank mit Access 2.0 erstellen können sollten. Außerdem sollten Sie mit Abfragen, Formularen (Formularentwurf!) und Berichten einigermaßen umgehen kön- nen, damit dort keine allzu langen Wartezeiten entstehen

Daher ist der Inhalt dieses Kurses

das Erstellen von Abfragen (Vertiefung)

Verfeinerung von Formular- und Berichtsentwürfen

Einführung in die Makroprogrammierung

Definition eigener Menü- und Symbolleisten

Schutz von Datenbanken vor unerlaubten oder unbeabsichtigten Zugriffen.

Dabei müssen Sie allerdings im Auge behalten, daß die Erstellung von Datenbankan- wendungen eigentlich die Arbeit von qualifizierten Programmierern ist, die dafür mehrere Jahre studiert haben. Wagen Sie sich also nicht zu früh an große Projekte, de- nen Sie am Ende vielleicht nicht mehr gewachsen sein könnten.

2. Die Beispieldatenbank

Dieses Kapitel soll den Aufbau der Beispieldatenbank, die bereits im Skript „Access 2.0 für Einsteiger“ erstellt wurde, für „Quereinsteiger“ kurz zusammenfassen, damit sie dem weiteren Verlauf des Kurses folgen können. Die Teilnehmer, die den Einstei- gerkurs noch in frischer Erinnerung haben, können daher dieses Kapitel getrost über- springen.

2.1. Aufgabenbeschreibung

Die Beispieldatenbank, an der sich dieser Kurs orientiert, soll eine einfache Bibliothek verwalten. Zu diesem Zweck werden Informationen über die Leser und den Bücher- bestand verwaltet. Dazu kommt die Verwaltung von Ausleihvorgängen inklusive der automatischen Erstellung von Mahnungen, falls die Leihfrist überzogen wurde.

2. Die Beispieldatenbank

3

Zwar genügt diese Beispieldatenbank nicht den Anforderungen, die an die Verwaltung einer Bibliothek in der Praxis gestellt werden. Jedoch bietet sie viele Möglichkeiten, um grundlegende Arbeitsweisen mit Access zu zeigen. Sie ist daher bewußt unter die- sem Aspekt reduziert auf das, was zum Erlernen der Funktionen wesentlich ist.

2.2. Tabellenstruktur der Beispieldatenbank

Die Informationen, die für die beschriebene Aufgabe nötig sind, werden über vier Ta- bellen verteilt gespeichert. Diese Tabellen wurden im Einsteigerkurs konzipiert und bis in die dritte Stufe normalisiert. Den Quereinsteigern sei noch einmal angeraten, die- ses Kapitel im Einsteigerkurs zu wiederholen, da der Grund für das Scheitern einer Datenbank in mindestens drei Viertel aller Fälle in einem falschen Datenbankentwurf liegt.

Die Tabellen sind im einzelnen:

1. Leser: In dieser Tabelle werden alle Informationen gespeichert, die die einzelnen Leser, d.h. die Kunden der Bibliothek, betreffen. Jedem Leser ist hier eine eindeutige Lesernummer zugewiesen (dabei handelt es sich um ein „Zähler“-Feld), die als Primärschlüssel der Tabelle dient.

2. Lesergruppen: Um eine statistische Auswertung der Ausleihdaten exem- plarisch durchzuführen, wurde jeder Leser einer Lesergruppe zugeordnet (Studenten, Professoren, sonstige Mitarbeiter), damit das Ausleihverhalten anhand dieser Gruppenzuordnung analysiert werden kann. Primärschlüssel ist das „Zähler“-Feld „Lesergruppe“.

3. Bücher: Hier sind die Informationen über den Bücherbestand gespeichert. Als Primärschlüssel dient dabei das Textfeld „Signatur“. Das bedeutet zu- gleich, daß für jedes einzelne Exemplar eines Buches eine eigene Signatur vergeben werden muß. Dies würde in einer „echten“ Bibliothek wohl eher durch die Vergabe von Mediennummern als Primärschlüssel erfolgen, so daß die Signatur nur noch Ordnungszwecken dient.

Abbildung 1: Die Beziehungen in der Beispieldatenbank

Abbildung 1: Die Beziehungen in der Beispieldatenbank

4

Access 2.0 für Fortgeschrittene

4. Ausleihen: Diese Tabelle enthält die einzelnen Ausleihvorgänge, wobei ein Ausleihvorgang definiert ist durch einen Leser (d.h. die Lesernummer), das ausgeliehene Buch (d.h. die Signatur) und des Ausleihdatums. Anhand des einzelnen Ausleihvorgangs kann dann die Verlängerung oder Mahnung realisiert werden.

Die genauen Felder der Beispieltabellen sowie die Beziehungen zwischen diesen Ta- bellen ersehen Sie aus Abbildung 1.

Erklärungsbedürftig ist hier lediglich die 1:n-Beziehung zwischen der Tabelle „Bücher“ und „Ausleihen“: Zwar kann ein Buch zu einem bestimmten Zeitpunkt nur einmal aus- geliehen sein, d.h. es kann ihm nur ein aktueller Datensatz in der Tabelle „Ausleihen“ gegenüberstehen. Jedoch soll mit Hilfe der Datenbank auch eine statistische Auswer- tung der einzelnen Ausleihvorgänge erfolgen. Hierzu ist es erforderlich, daß auch be- reits abgeschlossene Ausleihvorgänge noch in der Tabelle „Ausleihen“ gespeichert bleiben, so daß es durchaus möglich ist, daß einem Datensatz in der Tabelle „Bücher“ im Laufe der Zeit mehrere Datensätze in „Ausleihen“ gegenüberstehen und also eine 1:n-Beziehung erstellt werden mußte.

2.3. Bereits erstellte Objekte

Über die bereits erwähnten Tabellen hinaus wurden auch schon einige Abfragen, For- mulare und Berichte erstellt, die hier erläutert werden, soweit sie auch im Fortge- schrittenenkurs noch eine Rolle spielen:

2.3.1. Formulare

Folgende einfache Formulare wurden für die Dateneingabe erstellt:

Das Formular „Büchereingabe“ wurde mit dem „AutoFormular“-Assi- stenten erstellt und basiert auf der Tabelle „Bücher“.

Das Formular „Lesereingabe“ basiert auf der Tabelle „Leser“ und wurde ursprünglich mit dem Assistenten „Einspaltiges Formular“ erstellt, dann aber um einige Funktionen (z.B. Optionsgruppe für die Lesergruppe) er- weitert.

Das Formular „Ausleihen“ besteht aus einem Haupt- und einem Unter- formular und dient der Erfassung von Ausleihvorgängen: Im Hauptformu- lar werden die Informationen zu einem Leser angezeigt (Datenquelle ist die die Abfrage „Leserinformationen“), im Unterformular die zugehörigen Ausleihvorgänge (Datenquelle: „Ausleihinformationen“). Beide Formular- teile sind über die „Lesernummer“ miteinander verknüpft.

2.3.2. Abfragen

Zur Auswertung der Daten wurden die folgenden Abfragen erstellt:

Die Abfrage „Ausleihstatistik“ ermittelt für jedes Buch die Anzahl der Ausleihvorgänge, in denen es erfaßt ist. Dies wurde durch die Gruppierung

2. Die Beispieldatenbank

5

der Datensätze nach der Signatur der Bücher, verbunden mit der Aggre- gatfunktion „Anzahl“ erreicht.

Die Abfrage „Leserstatistik“ ist die Grundlage für eine graphische Dar- stellung der Ausleihvorgänge nach Lesergruppen.

Die Abfragen „Leserinformationen“, „Ausleihinformationen“ und „Mahnungen“ dienen als Datenquellen für das Formular „Ausleihen“ bzw. den Bericht „Mahnungen“.

2.3.3. Berichte

Um die Daten der Datenbank darzustellen, wurden folgende einfache Berichte erstellt:

Der Bericht „Ausleihstatistik“ stellt die Ergebnisse der Abfrage „Ausleihstatistik“ formatiert dar. Er wurde mit dem Berichtsassistenten für „Tabellarische Darstellung“ erstellt.

Der Bericht „Mahnungen“ erstellt automatisch Mahnbriefe zum Versand an säumige Leser. Er basiert auf der Abfrage „Mahnungen“ und wurde ur- sprünglich mit dem Assistent für „Gruppierungen“ erstellt, aber weitge- hend „von Hand“ umgestaltet.

3. Das Entwerfen von Abfragen (Vertiefung)

Im folgenden Kapitel soll noch einmal vertieft auf das Entwerfen von Abfragen eingegangen werden; schließlich sind Abfragen so ziemlich das leistungsfähig- ste, was Access zu bieten hat. Vorausset- zung für die Vertiefung ist, daß Sie be- reits folgendes beherrschen:

Erstellen von Auswahlabfragen im Abfrage-Entwurfsbereich durch Drag’n’Drop aus den Tabellen bzw. durch Doppelklick,

über

Erstellen

von

Abfragen

mehrere Tabellen,

Abbildung 2: Die Abfrage-Entwurfsansicht

Abbildung 2: Die Abfrage-Entwurfsansicht

Sortieren der Daten nach einem oder mehreren Feldern.

Zusammenstellen der Daten zu Gruppierungen, innerhalb derer Sie Aggregatfunktionen, also z.B. Summen, Mittelwerte oder auch Anzahlen berechnen.

Zur Wiederholung sehen Sie in Abbildung 2 den Entwurf einer kleinen Auswahlabfra- ge. Darin sollte Ihnen nichts mehr unbekannt vorkommen

6

Access 2.0 für Fortgeschrittene

3.1. Kriterien in Abfragen

Sie sollten auch bereits in der Lage sein, einfache Kriterien für Abfragen zu bestim- men, indem Sie sie in die Zeile „Kriterien“ im Abfrageentwurf eintragen.

3.1.1. Wiederholung: Schlüsselwörter in Abfragekriterien

Mögliche Schlüsselwörter für Kriterien sind:

=xxx: Nimmt alle Werte in die Abfrage auf, die in dem entsprechenden Feld genau xxx enthalten, wobei xxx entweder eine Zahl oder ein Text (der muß dann aber in Anführungszeichen stehen!) sein kann.

<xxx, <=xxx, >xxx, >=xxx, <>xxx: Wählt alle Datensätze aus, die in dem entsprechenden Feld einen Wert haben, der kleiner als, kleiner gleich, größer, größer gleich, ungleich xxx ist.

Zwischen xxx Und yyy: Wählt alle Datensätze aus, die in dem ent- sprechenden Feld einen Wert haben, der zwischen den angegebenen Gren- zen liegt (gleichbedeutend mit >=xxx Und >=yyy).

Wie "xxx": Wählt alle Datensätze aus, die in dem entsprechenden Feld einen Wert haben, der dem angegebenen Muster xxx entspricht. Beispiel:

Wie "[A-C]*" findet alle Datensätze, deren Wert im aktuellen Feld mit A, B, oder C anfängt.

Wie Sie solche Muster zusammenstellen können, erfahren Sie am besten in der Online-Hilfe zum Thema „Platzhalterzeichen“.

Oder, Und: Dienen zur Verknüpfung von beliebigen der oberen Aus- drücke, z.B.: Zwischen xxx Und yyy Oder >=zzz. Eventuell müssen einzelne Ausdrücke eingeklammert werden, um nicht zweideutige Ergebnisse zu provozieren.

Nicht: Verneint den folgenden Ausdruck, der sich aus den oberen Mög- lichkeiten zusammensetzt, z.B. Nicht (Zwischen 1 Und 100 Oder Zwischen 300 Und 350) wählt alle Werte aus, die zwischen Minus Unendlich und 0, zwischen 101 und 299, und zwischen 351 und Unendlich liegen.

Sie müssen für die Werte xxx nicht unbedingt feste Werte eintragen. Genausogut können Sie einen Wert aus dem gleichen Datensatz der Abfrage eintragen, indem Sie einfach statt des festen Wertes den Feldnamen in eckigen Klammern eintragen, also z.B. >=[Ausleihdatum] in das Kriterienfeld aufnehmen.

Genauso können Sie auch eingebaute Access-Funktionen wie z.B. Datum() für das aktuelle Datum verwenden. Eine Liste aller verfügbarer eingebauter Funktionen finden Sie in der Online-Hilfe unter dem Stichwort „Funktionen: Liste von“.

3. Das Entwerfen von Abfragen (Vertiefung)

7

3.1.2. Kombination von Kriterien über mehrere Felder

Soweit, so gut. Aber Sie werden sicher schon festgestellt haben, daß Sie manchmal Kriterien definieren möchten, die sich auf mehrere Felder erstrecken. Sie möchten bei- spielsweise alle Bücher auswählen, die eine der beiden folgenden Bedingungen erfül- len:

Das Erscheinungsjahr soll vor 1980 liegen und die Auflage mindestens 2 sein, oder

Das Erscheinungsjahr soll nach 1990 liegen, dann aber höchstens in erster Auflage.

Dazu sind in dem Abfrage- Entwurfsfenster mehrere Zeilen unter der Zeile „Kriterien“ vorhanden, die mit „oder“ mar- kiert sind. Alle Bedingungen, die Sie in der gleichen Zeile eintra- gen, werden mit „Und“ ver-

knüpft, alle, die in verschiedenen Zeilen stehen, mit „Oder“. Für das Beispiel sieht der untere Bereich des Entwurfsfen- sters also aus wie in Abbildung 3.

Abbildung 3: Mehrere Kriterien über mehrere Felder

Abbildung 3: Mehrere Kriterien über mehrere Felder

3.2. Besondere Beziehungen in Abfragen: Die Inventurliste

Nehmen Sie einmal an, Sie sollten eine Liste aller Bücher auswählen, die gerade nicht ausgeliehen sind, etwa um Listen für eine Inventur zu erstellen. Sie können selbstver- ständlich eine Abfrage erstellen, die aus der Tabelle „Bücher“ die nötigen Informatio- nen (Signatur, Autor, Titel, Auflage) extrahiert. Aber wie finden Sie heraus, ob das Buch tatsächlich gerade nicht ausgeliehen ist?

Mit Sicherheit benötigen Sie dafür die Tabelle „Ausleihen“, denn dort sind alle Infor- mationen über die Ausleihen enthalten. Wenn Sie die Frage nach den nicht ausgeliehe- nen Büchern noch einmal „datenbanktechnisch umformulieren“, werden Sie merken, daß es zwei verschiedene Möglichkeiten gibt, wann ein Buch nicht ausgeliehen ist, also im Regal steht:

Das Buch ist ein Ladenhüter und wurde noch nicht ein einziges Mal aus- geliehen. Dann existiert überhaupt kein Datensatz in der Tabelle „Aus- leihen“ mit der entsprechenden Signatur.

Das Buch wurde zwar bereits ausgeliehen, aber schon wieder zurückgege- ben, wobei dies auch mehrfach der Fall gewesen sein kann. Dann existieren zwar entsprechende Datensätze in der Tabelle „Ausleihen“, aber in allen diesen Datensätzen ist im Feld „Zurückgegeben“ ein „Ja“ eingetragen. Sobald ein Datensatz existiert, in dem hier „Nein“ steht, besteht ja ein noch offener Ausleihvorgang, d.h. das Buch ist momentan beim Leser und nicht im Regal.

8

Access 2.0 für Fortgeschrittene

Beginnen Sie einmal mit der ersten Möglichkeit, d.h. selektieren Sie alle Bücher, für die kein entsprechender Datensatz in der Tabelle „Ausleihen“ besteht:

Ausgangspunkt hierfür ist jedenfalls eine Auswahlabfrage, die auf den Tabellen „Bücher“ und „Ausleihen“ basiert und die Felder „Signatur“, „Autor“, „Titel“, „Auf- lage“ und „Ausleihen-ID“ enthält. Die „Ausleihen-ID“ ist nötig, um die Zahl der Aus- leihvorgänge ermitteln zu können. Außerdem werden Sie das Feld „Zurückgegeben“ benötigen, da Sie für die zweite Möglichkeit nach diesem Feld selektieren müssen.

3.2.1. Selektieren aller niemals ausgeliehenen Bücher (Inklusionsverknüpfung)

Erstellen Sie nun diese Auswahlabfrage zunächst einmal ohne die Angabe von Krite- rien und wählen Sie die Aggregatfunktion „Anzahl“ für die Spalte „Ausleihen-ID“ aus, damit die Anzahl von Ausleihvorgängen pro Buch angezeigt wird. Nun könnte man meinen, man müßte hier lediglich als „Kriterien“ „0“ oder „Ist Null“ eintragen, um die Bücher ohne passenden Ausleihvorgang zu selektieren. Doch weit gefehlt!

Sehen Sie sich einmal die Datenblattansicht der (noch kriterienfreien) Auswahlabfrage an: Access zeigt Ihnen von vornherein nur die Bücher an, für die auch verwandte Da- tensätze in „Ausleihen“ bestehen. Dies ist bei den meisten Auswahlabfragen auch ein erwünschtes Verhalten, nur eben nicht hier!

Dieses Verhalten können Sie aber beeinflussen, indem Sie den Typ der Beziehung zwischen „Bücher“ und „Ausleihen“ für diese eine Abfrage ändern. Wechseln Sie hier- zu in die Entwurfsansicht der Abfrage und doppelklicken Sie genau auf die Bezie- hungslinie zwischen den beiden Tabellen. Es erscheint die Dialogbox „Verknüpfungs- eigenschaften“ (Abbildung 4), in der Sie diesen Beziehungstyp festlegen: Standardmä- ßig ist hier der Verknüpfungstyp „Gleichheitsverknüpfung“ ausgewählt, d.h. es wer- den nur die Datensätze angezeigt, bei denen in beiden Tabellen entsprechende Daten- sätze vorhanden sind.

Wenn Sie hier den Beziehungstyp „Inklusionsverknüpfung“ auswählen, können Sie be- stimmen, daß aus einer der beiden Tabellen alle Datensätze angezeigt werden, unab-

Abbildung 4: Dialogbox „Verknüpfungseigenschaften“

Abbildung 4: Dialogbox „Verknüpfungseigenschaften“

3. Das Entwerfen von Abfragen (Vertiefung)

9

hängig davon, ob ein verwandter Datensatz in der anderen Tabelle existiert oder nicht. Wählen Sie hier also die zweite Variante aus, d.h. lassen Sie alle Datensätze aus der Tabelle „Bücher“ anzeigen, egal, ob sie bereits ausgeliehen wurden oder nicht. In der Entwurfsansicht wird die Beziehung nun durch ein Pfeilsymbol gekennzeichnet. Diese Änderung des Beziehungstyps wirkt sich aber nur innerhalb der aktuellen Abfrage aus. Falls Sie diese Einstellung für alle zukünftigen Abfragen erhalten möchten, müs- sen Sie dies bei den „Beziehungen“ einstellen. Allerdings macht das nur in den selten- sten Fällen Sinn!

In der Datenblattansicht sehen Sie nun, daß auch die nicht ausgeliehenen Bücher an- gezeigt werden, wobei (logischerweise) das Feld „Anzahl von Ausleihen-ID“ bei die- sen Büchern leer bleibt, da ja eben keine entsprechenden Ausleihen-IDs existieren. Je- denfalls ist es für Sie jetzt ein leichtes, als Kriterium in dieses Feld „Ist Null“ einzu- tragen, damit nur die leeren Felder angezeigt werden. Verwenden Sie hier nicht „0“, denn damit würden die Datensätze ausgewählt, bei denen tatsächlich die Zahl „0“ im Feld „Anzahl von Ausleihen-ID“ steht, und die gibt es nicht!

Damit wäre der erste Teil der Abfrage geschafft: Alle Bücher, die noch nie ausgeliehen wurden, werden angezeigt.

3.2.2. Selektieren aller zurückgegebenen Bücher

Nun kommt der schwierigere Brocken: Sie benötigen zusätzlich – also in der gleichen Abfrage – auch noch alle Bücher, für die zwar mindestens ein Datensatz in „Auslei- hen“ besteht, aber bei allen Datensätzen das Feld „Zurückgegeben“ auf „Ja“ steht oder – anders formuliert – bei keinem Datensatz in „Zurückgegeben“ „Nein“ steht.

Der Weg, der spontan jedem einfallen würde, wäre einfach das Kriterium „Ja“ im Feld „Zurückgegeben“. Das geht aber nicht, weil durchaus Bücher existieren können, bei denen zwar ein Datensatz mit „Ja“ existiert, die also einmal zurückgegeben wurden, bei denen aber später wieder ein neuer Ausleihvorgang stattfand, bei dem dann wieder „Nein“ eingetragen wurde.

Deswegen ist wieder eine Aggregatfunktion nötig, um zu ermitteln, ob es überhaupt einen Datensatz mit „Nein“ gibt oder nicht. Um zu verstehen, welche die richtige Funktion ist, müssen Sie aber erst wissen, wie Access die Werte „Ja“ und „Nein“ in- tern verwaltet: Nämlich als Zahlen, wobei „Nein“ durch 0 und „Ja“ durch -1 dargestellt werden.

So betrachtet suchen Sie also nach allen Datensätzen, bei denen im Feld „Zurückgege- ben“ nur -1 und niemals 0 steht. Das können Sie nun mit der Aggregatfunktion „Max“ (Maximum) bestimmen: Wenn der größte Wert einer Gruppe (d.h. aller Aus- leihdatensätze zu einer Signatur) 0 beträgt, gibt es (mindestens) einen Datensatz, bei dem hier 0, also „Nein“ steht. Nur dann, wenn der Maximalwert -1 ist, gibt es keinen solchen Datensatz, und alle Werte sind „Ja“; damit ist die Bedingung erfüllt. Wie Sie darauf kommen sollen? Die Frage ist schwer zu beantworten. Programmierarbeit er- fordert eben immer eine gehörige Portion Kreativität und Phantasie

10

Access 2.0 für Fortgeschrittene

Abbildung 5: Die Abfrage „Inventurliste“

Abbildung 5: Die Abfrage „Inventurliste“

Wählen Sie also für das Feld „Zurückgegeben“ die Aggregatfunktion „Max“ und tragen Sie als Kriterium „Ja“ (oder -1) ein. Dieses Kriterium muß nach dem, was Sie im vorigen Kapitel gelernt haben, in der zweiten Zeile eingetragen werden, damit Ac- cess nicht nur die Datensätze auswählt, die die erste und die zweite Bedingung erfüllen (solche gibt es nicht, weil ein Buch, das nie ausgeliehen wurde, nicht zurückgegeben worden sein kann!).

Ihre Abfrage sollte dann aussehen wie in Abbildung 5 (im Beispiel wurde das Feld „Anzeigen“ bei den Kriterienfeldern noch deaktiviert). Überprüfen Sie das Ergebnis Ih- rer Bemühungen in der Datenblattansicht, und Sie sollten zufrieden sein!

3.3. Parameterabfragen

Alle bisherigen Abfragen hatten den manchmal gravierenden Nachteil, daß Sie als Kri- terien feste Werte als xxx verwenden mußten. Wenn Sie nun andere Kriterien aus- wählen müssen (z.B. ein anderes Jahr), müssen Sie (oder eben die Sachbearbeiter, die mit Ihrer Datenbankanwendung arbeiten sollen) jedes Mal den Entwurf der Abfrage verändern.

Das muß aber nicht sein: Sie können auch erst bei der Ausführung der Abfrage vom Benutzer Kriterien eingeben lassen. Das ist dann sinnvoll, wenn Ihnen beim Arbei- ten immer wieder aufgefallen ist, daß Sie eine Abfrage an immer der gleichen Stelle verändern mußten.

Sie können in Access hierzu Parameter verwenden. Dazu sind zwei Schritte erforder- lich:

1. Tragen Sie dort, wo die abzufragende Variable (also das xxx) steht, eine Eingabeaufforderung in eckigen Klammern ein. Die Eingabeaufforde- rung muß den Konventionen für Variablennamen entsprechen, sie darf also

3. Das Entwerfen von Abfragen (Vertiefung)

11

keine Sonderzeichen wie zum Beispiel einen Punkt oder ein Ausrufezei- chen enthalten.

2. Wählen Sie den Menübefehl „Abfrage/Parameter“. In dem Dialogfeld, das dann erscheint, tragen Sie in die linke Spalte die Eingabeaufforderung genau so ein, wie Sie sie vorher definiert haben (auch mit den eckigen Klammern). In die rechte Spalte muß dann noch der Datentyp dieser Va- riablen eingetragen werden.

Dieser Schritt ist aber nur erforderlich, wenn Sie als Datentyp nicht „Zahl“ oder „Text“ auswählen. Bei diesen Standard-Datentypen erkennt Access das bei der Eingabe automatisch, so daß Sie es beim ersten Schritt belassen können. Insbesondere bei Datum/Zeit-Feldern ist die Eingabe des Parametertyps aber unumgänglich!

Die Eingabe der Parametertypen sieht dann aus wie in Abbildung 6.

Abbildung 6: Erstellen einer Parameterabfrage

Abbildung 6: Erstellen einer Parameterabfrage

Hier wurde ein Parameter für das Muster eines Wie-Kriteriums verwendet. Wenn Sie diese Abfrage öffnen, erscheint zuerst das Fenster aus Abbildung 7, in dem Sie den entsprechenden Wert eintragen müssen.

Dieses Fenster erscheint wahrscheinlich häufiger, als Ihnen lieb ist: Nämlich immer dann, wenn in einer Abfrage bei einem Feldnamen ein Tippfehler steckt und Access diesen Feldnamen deswegen nicht erkennen kann. Auch wenn in einer Abfrage, einem Formular oder einem Bericht berechnete Felder verwendet werden (siehe dazu unten den Abschnitt 4.3.6, „Berechnete Fel- der in Formularen und Berichten“ auf Seite 28) und bei den Feldnamen der Berechnung ein Tippfehler versteckt ist, geht Access davon aus, daß Sie ein Parameterfeld verwenden möchten

Abbildung 7: Abfrage eines Parameters

Abbildung 7: Abfrage eines Parameters

12

Access 2.0 für Fortgeschrittene

und verlangt die Eingabe eines Parameterwertes.

3.4. Berechnete Felder in Abfragen

Sie sind aber nicht nur daran gebunden, in Abfragen die Werte aus bestimmten Daten- sätzen auszugeben. Sie können auch Werte aus bestimmten Feldern berechnen las- sen. Zum Beispiel können Sie das Produkt zweier Felder in ein drittes Feld ausgeben lassen, indem Sie in das gewünschte Feld im Abfrage-Entwurfsbereich zuerst den Feldnamen des ersten Faktors, dann das Mal-Zeichen (*), und dann den Feldnamen des zweiten Feldes. In diese Rechnungen können Sie auch konstante Zahlen einfügen. Um einen Preis, der in einer Tabelle im Feld „Preis“ enthalten ist, immer mit der Mehrwertsteuer auszugeben, können Sie in ein Feld der Abfrage statt des Feldnamens einfach [Preis]*1,15 eintragen. Wenn Sie das Feld verlassen, werden Sie fest- stellen, daß Access vor Ihre Formel den Text „Ausdruck1:“ gestellt hat. Das ist der Feldname für dieses Feld, den sie natürlich auch selbst eintragen oder verändern kön- nen.

Achten Sie auch auf die eckigen Klammern bei den Feldnamen! Im Regelfall werden diese zwar von Access eingetragen, aber bei Feldnamen, die Sonderzeichen wie zum Beispiel Bindestriche oder Leerzeichen enthalten, trennt Access den Namen in zwei Bestandteile und sieht einen Bindestrich beispielsweise als Berechnung der Differenz zweier Teilnamen.

Als Formel können Sie jeden beliebigen Ausdruck eintra- gen. Wenn Sie von einem Buch z.B. wissen möchten, wie viele Tage es bereits „überfällig“ ist, wie viele Tage also zwischen dem eigentlichen Rückgabeter- min und dem heutigen Tag lie- gen, sieht die Abfrage aus wie in Abbildung 8.

Abbildung 8: Berechnete Felder in einer Abfrage

Abbildung 8: Berechnete Felder in einer Abfrage

3.5. Aktionsabfragen

Aber Abfragen können noch viel mehr als nur die Auswahl von Datensätzen nach be- stimmten Kriterien aus verschiedenen Tabellen. Abfragen sind auch ein wichtiges Werkzeug, um Veränderungen an Ihren Daten vorzunehmen. Sie können damit Daten nach bestimmten Kriterien verändern, löschen, an eine bestehende Tabelle anfü- gen oder auch eine neue Tabelle daraus erstellen. Dazu erstellen Sie am besten zu- nächst eine Auswahlabfrage, die alle gewünschten Daten enthält; das ist am unge- fährlichsten, falls Sie sich bei den Auswahlkriterien irren sollten. Danach wählen Sie das entsprechende Symbol aus der Symbolleiste, um eine Aktionsabfrage daraus zu er- stellen (siehe Abbildung 9). Je nachdem, was für eine Art von Aktionsabfrage Sie ge- wählt haben, geht es unterschiedlich weiter.

3. Das Entwerfen von Abfragen (Vertiefung)

13

Zum Ausführen jeder Aktionsabfra- ge klicken Sie auf das Symbol mit dem Ausrufezeichen in der Sym- bolleiste oder wählen Sie die Daten- blattansicht.

Aktualisierung

Tabelle erstellen

Anfügen Löschen
Anfügen
Löschen
Aktualisierung Tabelle erstellen Anfügen Löschen Abbildung 9: Symbole für Aktionsabfragen

Abbildung 9: Symbole für Aktionsabfragen

3.5.1. Tabellenerstellungsabfrage

Wenn Sie aus den Daten Ihrer Abfrage eine neue Tabelle erstellen möchten, wählen Sie das Symbol „Tabelle erstellen“ aus der Symbolleiste. Access fragt Sie nach dem Namen der Tabelle sowie der Datenbank, in der diese Tabelle liegen soll. Sie können also auch eine Tabelle in einer anderen Datenbank erstellen. Wenn Sie diese Angaben später einmal ändern möchten, klicken Sie einfach erneut auf das Symbol oder wählen Sie den Menübefehl „Abfrage/Tabellenerstellung“ in der Abfrage-Entwurfsansicht.

Ein Anwendungsbeispiel hierfür ist die Archivierung alter Datensätze: Wenn Ihre Datenbank einmal „in die Jahre gekommen ist“ und das Sortieren immer langsamer wird, weil noch Daten von 1995 mit sortiert werden, sollten Sie alte Datensätze, die Sie nicht mehr benötigen, in eine andere Archiv-Tabelle auslagern, damit Sie die Ar- beitsgeschwindigkeit nicht reduzieren. Dafür erstellen Sie erst eine Tabellenerstel- lungsabfrage für die Archivierung und danach eine Löschabfrage für das Löschen der alten Daten (siehe unter 3.5.4).

Sollten Sie hier in der Bibliotheksdatenbank alte Ausleihvorgänge archivieren wollen, erstellen Sie also einfach eine neue Abfrage, die alle Felder aus der Tabelle „Auslei- hen“ enthält und selektieren Sie nach dem Ausleihdatum („Zwischen 1.1.1995 und 31.12.1995“) und sicherheitshalber nach „Zurückgegeben = Ja“, damit nicht noch offene Ausleihvorgänge mit gelöscht werden.

Wählen Sie dann das Symbol „Tabellenerstellungsabfrage“, um die Dialogbox aus Abbildung 10 zu erhalten. Hier geben Sie lediglich den Namen der zu erstellenden Tabelle (hier: „Ausleihen-Archiv 1995“) ein. Wenn Sie möchten, können Sie diese Tabelle auch in einer anderen Datenbank erstellen, um Plattenplatz in der Arbeits- Datenbank zu sparen.

Sobald Sie dann auf das Symbol mit dem Ausrufezeichen in der Symbolleiste klik- ken, wird die Abfrage ausgeführt, und das Datenblatt, das Sie vorher als Auswahlab-

Abbildung 10: Tabellenerstellungsabfrage

Abbildung 10: Tabellenerstellungsabfrage

14

Access 2.0 für Fortgeschrittene

frage zusammengestellt hatten, wird in eine neue Tabelle mit dem angegebenen Namen gespeichert.

3.5.2. Aktualisierungsabfrage

Wenn Sie Daten in Ihren Tabellen in großem Umfang verändern möchten, wählen Sie das Symbol für „Aktualisieren“ aus der Symbolleiste. Access fügt in den unteren Bereich des Entwurfsfensters eine Zeile „Aktualisieren“ ein, in die Sie den Ausdruck für den neuen Wert des Feldes eintragen können. Sie können dort alles tun, was Sie auch in einem berechneten Feld einer Abfrage darstellen können (siehe unter 3.4 auf Seite 14), also auch einfach feste Werte eintragen.

In der Tat ist es am sichersten, wenn Sie auch hier zuerst eine Auswahlabfrage er- stellen, die in einem berechneten Feld das später gewünschte Ergebnis Ihrer Aktualisie- rungsabfrage ausgibt. Wenn Sie mit dem Ergebnis zufrieden sind, wählen Sie „Aktualisierungsabfrage“ über die Symbolleiste oder den Menübefehl „Abfrage/Aktu- alisieren“ aus, und kopieren Sie den Ausdruck für das berechnete Feld einfach in die „Aktualisieren“-Zeile des Feldes, das Sie neu berechnen wollen. In dieser Zeile darf auch der Feldname des zu aktualisierenden Feldes auftauchen. Er steht dann für den alten Wert dieses Feldes.

Ein Beispiel für die Bibliotheksverwaltung ist die Pauschalverlängerung aller Bü- cher eines bestimmten Lesers (vgl. Abbildung 11): Bei allen Büchern eines be- stimmten Lesers (Die Lesernummer wird durch eine Parameterabfrage bestimmt), die in höchstens 10 Tagen ablaufen und noch nicht zweimal verlängert wurden, wird das Rückgabedatum um vier Wochen (28 Tage) verlängert und die Zahl der Verlängerun- gen um eins erhöht.

Hier sind drei Kriterien (Lesernummer, Rückgabedatum, Zahl der Verlängerungen) miteinander Und-verknüpft (sie stehen in der gleichen Zeile), so daß nur die Daten-

Abbildung 11: Die Aktualisierungsabfrage „Pauschalverlängerung“

Abbildung 11: Die Aktualisierungsabfrage „Pauschalverlängerung“

3. Das Entwerfen von Abfragen (Vertiefung)

15

sätze selektiert (und aktualisiert) werden, auf die alle Bedingungen zutreffen.

3.5.3. Anfügeabfrage

Mit einer Anfügeabfrage können Sie ausgewählte Daten aus Berechnungen oder aus einer oder mehreren Tabellen an eine andere Tabelle anfügen. Wenn Sie beispiels- weise auf einen Knopfdruck des Benutzers hin an eine Tabelle einen Datensatz anfü- gen möchten, verwenden Sie hierzu eine Anfügeabfrage, die per Makro gestartet wird (dazu mehr in Abschnitt 6.3.2 Ereignisse und Makros, auf Seite 52).

Um das am einfachsten zu gestalten, erstellen Sie zunächst eine Auswahlabfrage, die alle anzufügenden Felder enthält, wobei es praktisch, aber nicht zwingend ist, wenn Sie schon die Feldnamen der Tabelle verwenden, an die Sie die Datensätze anfügen möch- ten. Wenn Sie dann das Symbol „Anfügen“ anwählen, fragt Access Sie – wie bei der Tabellenerstellungsabfrage – nach den Namen der Tabelle und der Datenbank, in die die Daten eingefügt werden sollen. Wenn Sie diese Angaben ausgefüllt haben, er- scheint eine neue Zeile „Anfügen an“ im Entwurfsbereich Ihrer Abfrage, die die Feldnamen der Zieltabelle enthält, an die die jeweiligen Daten angefügt werden sollen. Wenn Sie die richtigen Feldnamen schon in der Auswahlabfrage verwendet haben, er- kennt Access automatisch die Feldnamen der Zieltabelle. Ansonsten müssen Sie sie jetzt eintragen.

Nach dem Klick auf das Symbol mit dem Ausrufezeichen startet die Anfügeabfrage.

3.5.4. Löschabfrage

Mit einer Löschabfrage können Sie Daten nach bestimmten Kriterien aus Ihrem Bestand löschen. Ein Beispiel ist das Löschen aller Ausleihinformationen aus dem Jahre 1995, die Sie ja oben in 3.5.1 archiviert haben. Dafür sieht die zugehörige Löschabfrage aus wie in Abbildung 12. Beachten Sie das erste Feld „Auslei- hen.*“: Es bedeutet, daß alle Felder des Datensatzes gelöscht werden. In das Feld „Löschen von“ können Sie keine einzelnen Datenfelder eintragen.

Wenn Sie einzelne Felder der Datensätze (etwa nur das Feld „Verlängerung“) lö- schen möchten, können Sie dies nicht mit einer Löschabfrage erreichen. Sie müssen dann eine Aktualisierungsabfrage verwenden, die in die entsprechenden Felder den festen Wert „Null“ einträgt, damit die Inhalte gelöscht werden.

3.6. Kreuztabellenabfragen

Eine weitere Besonderheit sind Kreuztabellenabfragen. Sie können damit den Spal- tenüberschriften einer Abfrage ebenfalls Werte aus Ihrer Datenbank zuordnen, es werden also nicht Feldnamen verwendet, sondern Datenwerte. Das ist für Übersichts- darstellungen sehr hilfreich, weil Sie Gruppierungen dann nicht nur untereinander dar- stellen können, sondern auch nebeneinander.

16

Access 2.0 für Fortgeschrittene

Abbildung 12: Löschen archivierter Daten
Abbildung 12: Löschen archivierter Daten

Abbildung 13: Der Entwurf einer Kreuztabellenabfrage

Wenn Sie beispielsweise eine Abfrage erstellen möchten, die Ihnen pro Lesergruppe die monatlichen Ausleihen zeigt, so müßten Sie mit einer herkömmlichen Aus- wahlabfrage zunächst nach Monaten des Ausleihdatums, dann darin nach Lesergrup- pen gruppieren, und bei den Ausleihen als Aggregatfunktion „Anzahl“ eintragen. Das Ergebnis wäre relativ unübersichtlich. Übersichtlicher geht das mit einer Kreuztabel- lenabfrage. Hierzu wählen Sie das Symbol „Kreuztabelle“ aus der Symbolleiste des Abfrageentwurfs. Es erscheint eine neue Zeile mit der Überschrift „Kreuztabelle“. Für jedes Feld Ihrer Abfrage tragen Sie dort ein, welche Funktion es in der Kreuztabelle erfüllen soll:

Zeilenüberschrift: Die Inhalte des entsprechenden Feldes werden als Zei- lenüberschriften verwendet. In einer Kreuztabelle können Sie mehrere Zeilenüberschriften verwenden, die dann wie herkömmliche Gruppierun- gen verwendet werden. Im Beispiel (Abbildung 13) wurden die Monate als Zeilenüberschriften verwendet.

Hier wurde ein kleiner Trick verwendet, um aus dem Ausleihdatum nur den Monat zu extrahieren: Mit der Funktion „Format([Ausleih- datum]; "mmmm")“ wird für dieses Feld vom Typ Datum ein Ausga- beformat gewählt, das nur den Monat als Text anzeigt. Näheres dazu fin- den Sie in der Online-Hilfe zum Thema „Format“.

Spaltenüberschrift: Die Inhalte des entsprechenden Feldes werden als Überschrift für die Spalten der Abfrage verwendet. In einer Kreuztabellen- abfrage kann nur ein Feld als Spaltenüberschrift bestimmt werden. Im Beispiel ist das der Name der Kundengruppe (Zuordnung)

Tabelleneintrag: Diese Einstellung bestimmt, daß die Inhalte dieses Fel- des verwendet werden, um die Tabelle auszufüllen. Hierbei muß eine Ag- gregatfunktion verwendet werden, die eine Berechnung über alle Werte

3. Das Entwerfen von Abfragen (Vertiefung)

17

der entsprechenden Gruppe ausführt (z.B. Summe, Mittelwert oder An- zahl), da ein Tabelleneintrag immer mehrere Datensätze vereinigt (alle, die zur entsprechenden Zeile und Spalte gehören). Im Beispiel wurde die An- zahl der Lesernummern aus der Ausleihen-Tabelle verwendet, um die An- zahl der Entleihvorgänge zu ermitteln.

(nicht angezeigt): Dieses Feld taucht in der Abfrage nirgends auf, kann aber verwendet werden, um Sortierungen oder Kriterien festzulegen (entspricht der Auswahl „nicht anzeigen“ in Auswahlabfragen).

Im Beispiel wurde mit Hilfe dieses Tricks für die richtige Sortierung der Monate gesorgt: Wenn nach dem Feld „Monat“ aufsteigend sortiert wür- de, würden die Monate alphabetisch nach ihrem Namen sortiert (also

nicht nach der Reihenfolge im Jahr. Daher wurde vorne

noch ein Feld „Sortiermonat“ eingefügt, in dem die Monate zusätzlich als

und nach diesem (versteckten)

April, Februar,

),

zweistellige Zahl erscheinen (01, 02, 03 Feld aufsteigend sortiert.

)

Die zweistellige Zahl wird übrigens durch den Ausdruck „Sortiermo- nat: Format([Ausleihdatum]; "mm")“ erzeugt.

Das Ergebnis der Abfrage sehen Sie in Abbildung 14: Die Daten sind so wesentlich übersichtlicher angeordnet als bei einer einfachen Gruppierungs-Abfrage.

Access stellt zwar für das Erstellen von Kreuztabellenabfragen einen Assistenten zur Verfügung, der aber voraussetzt, daß Sie bereits eine fertig gruppierte Auswahlabfrage (bis auf die Aggregatfunktionen) erstellt haben. So ist es auf jeden Fall schneller, wenn Sie die entsprechenden Einträge von Hand vornehmen.

3.7. Zusammenfassung

Das bis hierher gezeigte sollte als Grundlage für die Erstellung eigener Abfragen aus- reichen. Sie können das Gelernte natürlich beliebig miteinander kombinieren, also z.B. in die Aggregatfunktionen einer Kreuztabellenabfrage noch berechnete Felder einfügen und alles nach bestimmten Kriterien-Parametern ausgeben lassen. Im Ergebnis wird man wohl sagen können, daß alle Fra- gen, die Sie an Ihre Datenbank formulie- ren können, mit Hilfe von Abfragen rea- lisierbar sind.

Abbildung 14 : Kreuztabellenabfrage

Abbildung 14: Kreuztabellenabfrage

4. Vertiefung:

und Berichte

Formulare

Der nächste „große“ Brocken in Access sind die Formulare und Berichte, mit de- nen Sie Daten in ansprechender Form ein- bzw. ausgeben lassen können. Spe-

18

Access 2.0 für Fortgeschrittene

ziell bei der Erstellung von komplexeren Datenbankanwendungen, in denen die Kon- trolle der Konsistenz der Daten nicht ganz Access überlassen werden kann, weil die Mechanismen der referentiellen Integrität alleine nicht ausreichen, sondern beispiels- weise bei einer Eingabe des Benutzers in ein Feld zugleich andere Felder in anderen Tabellen aktualisiert werden müssen, müssen Sie alle Eingaben über Formulare reali- sieren, weil Sie nur dort die Möglichkeit haben, alle Aktionen des Benutzers zu über- wachen und entsprechend darauf zu reagieren.

Für dieses Kapitel sollten Sie bereits folgendes beherrschen:

Das Erstellen einfacher Formulare und Berichte mit Hilfe der Formular- und Berichtsassistenten,

Das Verändern des Aussehens Ihrer Formulare und Berichte in der Ent- wurfsansicht durch Verschieben und durch Veränderung der Größe der einzelnen Steuerelemente,

Das Hinzufügen neuer Steuerelemente mit Hilfe der Steuerelementassi- stenten (falls vorhanden) bzw. per Drag & Drop aus der Feldliste,

Den Umgang mit den vielen verschiedenen Mauszeigerformen in der Entwurfsansicht.

4.1. Das Eigenschaftenfenster

Hoffentlich ist Ihnen im Verlauf Ihrer Arbeit mit Formularen in Access schon einmal das „Eigenschaftenfenster“ über de Weg gelaufen. Um zu wissen, was es eigentlich darstellt, muß man ein bißchen darüber Bescheid wissen, wie Access Formulare und Berichte verwaltet: Access ist ein Entwicklungssystem für objektorientierte Anwen- dungen. Das klingt ziemlich kompliziert, ist es aber nicht. Es bedeutet lediglich, daß

die einzelnen Formulare und auch die einzelnen Steuerelemente eines For- mulars getrennte Objekte sind, die miteinander nicht viel zu tun haben, sondern ein richtiges Eigenleben füh- ren.

Jedes solche Objekt hat bestimmte Ei- genschaften; am einfachsten ist das für die Größe, die Position und das Aussehen (Schriftart etc.) zu verste- hen. Es gibt jedoch viel mehr, bis zu 60 Eigenschaften pro Steuerelement. Sie können sich alle davon mit dem sog. Eigenschaftenfenster anzeigen

lassen (Menü Ansicht/Eigenschaften, Klick auf das Eigenschaften-Symbol der Symbolleiste im Formular- bzw. Berichts-

Abbildung 15: Das Eigenschaftenfenster

Abbildung 15: Das Eigenschaftenfenster

bzw. Berichts- Abbildung 15: Das Eigenschaftenfenster entwurf ( Im Eigenschaftenfenster werden immer die

entwurf (

Im Eigenschaftenfenster werden immer die Eigenschaften des gerade ausgewählten

) oder durch Doppelklick auf ein Steuerelement) und sie darin verändern.

4. Vertiefung: Formulare und Berichte

19

Steuerelementes (oder Formulars) angezeigt (siehe Abbildung 15); dessen Name er- scheint in der Titelzeile des Eigenschaftenfensters.

Die Eigenschaften sind in verschiedene Kategorien aufgeteilt, die Sie (der Übersicht- lichkeit halber) getrennt anschauen können, indem Sie in dem Kombinationsfeld oben im Eigenschaftenfenster die gewünschte Art von Eigenschaften auswählen. Es gibt

Daten-Eigenschaften: Alle Eigenschaften, die dafür sorgen, daß das Steuerelement bzw. das Formular die richtigen Daten zur richtigen Zeit anzeigt. In den meisten Fällen werden diese Eigenschaften von Assistenten gesetzt (z.B. Formularassistenten).

Layout-Eigenschaften: Diese Eigenschaften bezeichnen das Aussehen des Objekts, also seine Größe, Position, Farbe, Schriftart, Beschriftung etc. Diese Eigenschaften können Sie komfortabel entweder mit der Maus oder über die Symbolleiste (für Schriftart etc.) verändern.

Ereignis-Eigenschaften: Diese Eigenschaften sind ganz besondere. Hier findet im wesentlichen die Programmierung Ihrer Anwendung statt:

Praktisch alle Aktionen des Benutzers (Mausklicks, Tastendrücke

schlagen sich in sog. Ereignissen nieder, die einem Steuerelement zuge- ordnet werden. Wenn also beispielsweise ein Benutzer auf eine Befehls- schaltfläche in Ihrem Formular klickt, tritt das Ereignis „Beim Klicken“ für diese Schaltfläche ein. Wenn Sie darauf reagieren möchten (z.B. ein Makro starten), müssen Sie dieses Makro in die Ereignis-Eigenschaft des entspre- chenden Ereignisses eintragen. Dazu später mehr im Abschnitt 6.3.2, Ereignisse und Makros auf Seite 52.

)

Andere Eigenschaften: Das ist der kümmerliche Rest, der in keine dieser Gruppen paßt, also zum Beispiel der Name des Steuerelements (wichtig, wenn mit dem Inhalt ein anderes Feld berechnet werden soll), der Text, der in der Statuszeile angezeigt werden soll, wenn das Steuerelement aktiv ist etc.

4.2. Die Palette

Abbildung 16: Die Palette

Abbildung 16: Die Palette

Wenn Sie das Aussehen Ihrer Steuerele- mente und Ihres Formulars verändern möchten, bedienen Sie sich dazu am ein- fachsten der Palette (Abbildung 16), die die wichtigsten Grundfunktionen für das Lay- out enthält. Die weiteren Einstellungen wie Schriftart, -größe und -Stil finden Sie in der Symbolleiste zum Formularentwurf.

In der Palette können Sie in der ersten Zeile von Symbolen den Rahmenstil (vertieft,

erhöht oder normal) und dessen Dicke und Linienart (durchgezogen, gestrichelt oder gepunktet) bestimmen. Außerdem können

20

Access 2.0 für Fortgeschrittene

Sie im übrigen Teil die Farben für Text, Hinter- grund und Rand einstel- len, wobei die besondere Farbe „Transparent“ be- deutet, daß der Rahmen bzw. der Hintergrund nicht dargestellt werden, sondern auf das, was da- hinter steht, durchblicken lassen. Für den Hinter- grund ist das meistens empfehlenswert.

Textfeld Bezeichnungsfeld Umschaltfläche Optionsgruppe Optionsfeld Kontrollkästchen Kombinationsfeld Listenfeld
Textfeld
Bezeichnungsfeld
Umschaltfläche
Optionsgruppe
Optionsfeld
Kontrollkästchen
Kombinationsfeld
Listenfeld
Diagramm
Unterformular
Objekt (ungebunden)
Linie
Seitenumbruch
Objekt (gebunden)
Rechteck
Befehlsschaltfläche
Assistent
Feststellen
Abbildung 17: Die Toolbox

4.3. Steuerelemente

Im folgenden werden Sie die am häufigsten verwendeten Steuerelemente kennenler- nen. Sie werden deren Optik schon von anderen Windows-Anwendungen kennen. In Access können Sie alle Elemente verwenden, die Sie kennen, um Daten darzustellen oder um Benutzeraktionen auszuführen.

Eigene Steuerelemente fügen Sie ein, indem Sie in der Toolbox (siehe Abbildung 17) das entsprechende Symbol aktivieren und dann dorthin klicken, wo Sie das neue Steu- erelement haben möchten. Falls Sie die Schaltfläche „Assistent“ aktiviert haben, startet automatisch der entsprechende Steuerelementassistent, falls für Ihr ausgewähltes Steu- erelement ein solcher existiert.

Jedes Steuerelement kann entweder an ein Feld aus der dem Formular oder dem Be- richt zugrundeliegenden Tabelle oder Abfrage gebunden sein, oder es ist ungebun- den, enthält also keinen Wert aus Ihrer Datenbank; Sie können in einem ungebundenen Feld z.B. das aktuelle Datum anzeigen lassen oder von einem Benutzer Informationen, die Sie nur vorübergehend benötigen, eintragen lassen.

4.3.1. Textfelder

Am häufigsten sind Textfelder anzutref- fen. In ihnen werden alle Text- und

Zahleneingaben abgewickelt. Access verwendet solche Textfelder standardmäßig, wenn Sie ein Feld aus der Feldliste in das Formular ziehen, oder wenn Sie ein Formular mit einem Assistenten erstellen. Ein Bei- spiel eines Textfeldes sehen Sie in Abbildung 18.

Den Inhalt eines Textfeldes können Sie editieren, wenn Sie die F2-Taste drücken (oder mit der Maus hineinklicken). Es gelten die üblichen Windows-Konventionen, es wird also der markierte Textteil gelöscht und überschrieben, wenn Sie lostippen (in Abbildung 18 würde also nach Druck auf die Taste „A“ nur noch ein A darin stehen.

Abbildung 18: Ein Textfeld

Abbildung 18: Ein Textfeld

4. Vertiefung: Formulare und Berichte

21

4.3.2. Kombinations- und Listenfelder

Kombinations- und Listenfelder sind praktisch, wenn dem Benutzer die Eingabe von Daten erleichtert werden soll. Sie bekommen Ihre Liste aus einer eigenen Daten- quelle, sind also unabhängig von der Datenherkunft des Formulars. Der Unterschied zwischen Kombinations- und Listenfeldern besteht darin, daß bei Listenfeldern die Li- ste ständig angezeigt wird (und Platz verbraucht), bei Kombinationsfeldern hingegen nur bei Bedarf geöffnet wird.

Für die Datenherkunft der Liste gibt es bei beiden drei Möglichkeiten, die mit der Ei- genschaft „Herkunftstyp“ (oder durch den Assistenten) eingestellt werden:

Tabelle/Abfrage (Standard): Die Werte für die Liste werden über eine Abfrage oder direkt aus einer Tabelle aus der Datenbank ausgelesen. Dies geschieht einmalig beim Öffnen des Formulars. Änderungen, die Sie vor- nehmen, während das Formular geöffnet ist, schlagen sich nicht automa- tisch in der Liste nieder. Das müssen Sie mit der Makro-Aktion „AktualisierenDaten“ selbst übernehmen. Die Eigenschaft „Datenherkunft“ enthält dann den Namen (oder, wenn Sie das Feld mit einem Assistenten erstellt haben, den SQL-Code) der Abfrage, die die Daten bereitstellt.

Verwenden Sie diesen Herkunftstyp beispielsweise, um 1:n-Verknüpfun- gen darzustellen (z.B., um bei den Ausleihen die Buchsignaturen aus einer Liste auszuwählen, die aus der Büchertabelle stammt; so kann der Benut- zer keine nicht vorhandenen Bücher eintragen).

Werteliste: Sie können selbst im Formularentwurf Werte vorgeben, die in der Liste stehen werden. Diese Werte tragen Sie, durch Strichpunkte ge- trennt, in die Eigenschaft „Datenherkunft“ ein. Verwenden Sie diese Mög- lichkeit, um bestimmte, häufig benutzte Werte für ein Steuerelement leichter erreichbar zu machen (z.B. die häufigsten Städte bei der Kunden- eingabe).

Feldliste: Bei dieser Einstellung trägt Access in die Liste die Feldnamen der Tabelle oder Abfrage ein, die Sie in der Eigenschaft „Datenherkunft“ eingetragen haben. Dafür habe ich noch keine praktische Anwendung ge- funden.

Am häufigsten wird wohl der Herkunftstyp „Tabelle/Abfrage“ sein, darum lohnt es sich, darauf noch etwas genauer einzugehen. Sie können ohne weiteres eine mehrspal- tige Liste darstellen (Eigenschaft „Spaltenanzahl“). Allerdings können Sie in dem ei- nen Feld des Formulars, das durch das Kombinations- oder Listenfeld dargestellt wird, nur den Wert aus einer Spalte speichern. Welcher das ist, bestimmen Sie mit der Ei- genschaft „Gebundene Spalte“.

Um also dem Benutzer im Ausleihen-Formular die Titel der Bücher in der Liste mit anzuzeigen, aber tatsächlich die Signatur (als Fremdschlüssel in der Ausleihen-Tabelle) einzutragen, erstellen Sie als Datenherkunft für ein Kombinationsfeld eine Abfrage, die aus der Büchertabelle die Signaturen und die Titel ausliest, und tragen Sie die Spalte 1 (die mit der Signatur) als gebundene Spalte ein. Falls Sie die Signatur gar nicht sehen

22

Access 2.0 für Fortgeschrittene

möchten, sondern nur mit Titeln arbeiten wollen (wobei natürlich die Signatur im Hintergrund als Fremdschlüssel eingetragen werden muß), ändern Sie die Spaltenbreite der ersten Spalte auf 0 cm (in der Eigenschaft „Spaltenbreiten“, wo die Breiten der Spalten nacheinander durch Strichpunkt getrennt aufgelistet sind).

Bei Kombinationsfeldern gibt es zudem noch ein paar äußerst praktische Eigenschaf- ten, die Sie verwenden können, um den Benutzern das Arbeiten zu erleichtern:

Nur Listeneinträge: Wenn diese Eigenschaft auf „Ja“ gestellt ist, akzep- tiert Access in diesem Feld nur Werte, die auch in der Liste stehen. Bei dem Beispiel für eine Werteliste, also der Eingabe von Städten im Kun- denformular, wäre das offensichtlich Blödsinn, nicht aber dann, wenn tat- sächlich Werte aus einer anderen Tabelle eingetragen werden sollen.

Automatisch ergänzen: Die angenehme Eigenschaft von Access, bei Ein- gaben in Kombinationsfelder nach dem ersten getippten Buchstaben auto- matisch schon den am besten passende Eintrag aus der Liste auszuwählen, können Sie auch für Ihre Kombinationsfelder verwenden.

Auch bei Kombinations- und Listenfeldern ist die Verwendung des Steuerelementassi- stenten sehr empfehlenswert, da er alle schwierigen Eigenschaften bereits einstellt.

4.3.3. Optionsgruppen

Vielleicht kennen Sie aus anderen Windows-Anwendungen bereits Optionsgruppen, in denen Sie zwischen verschiedenen Möglichkeiten wählen können (siehe Abbildung 19) Im Gegensatz zu Kombinations- oder Listenfeldern sind bei Optionsgruppen die Möglichkeiten fest vorgegeben und können nicht dynamisch aus Tabellen ausgelesen werden. Außerdem können Sie Optionsgruppen nur zur Darstellung von Zahlenwerten verwenden.

Eine Optionsgruppe besteht aus dem Rahmen (das ist die Optionsgruppe im eigentli- chen Sinne) und den einzelnen Optionsfeldern (hier: „Student“, „Professor“, „Ex- tern“), die eigene Objekte mit eigenen Eigenschaften darstellen.

In Access erhält jedes einzelne Element einer Options- gruppe einen Optionswert (eine Ganzzahl), der in der gleichnamigen Eigenschaft des Optionsfeldes eingetra- gen wird. Im Beispiel wurde für „Student“ 1, für „Professor“ 2 und für „Extern“ 3 vergeben. Die Opti- onsfelder alleine können an kein Feld der Datenbank

gebunden werden, sondern nur die ganze Optionsgruppe. Ihr Inhalt ist der Options- wert des gerade aktiven Optionsfeldes, im Beispiel also 2.

Optionsgruppen erstellen Sie am einfachsten mit dem Optionsgruppenassistenten. Bitte halten Sie sich an den Windows-Standard und verwenden Sie nur Optionsfelder und Umschaltflächen, aber keine Kontrollkästchen in Optionsfeldern! Kontrollkästchen sind nach der Windows-Definition nur da zu verwenden, wo Sie mehrere Optionen gleichzeitig aktivieren können. Das geht aber in Access-Optionsgruppen nicht.

Abbildung 19: Optionsgruppe

Abbildung 19: Optionsgruppe

4. Vertiefung: Formulare und Berichte

23

4.3.4. Bezeichnungsfelder

Bisher wurden die Bezeichnungsfelder stillschweigend mit verwendet, ohne näher auf sie einzugehen: Wenn Sie ein Steuerelement aus der Toolbox erstellen, erstellt Access im Regelfall ein Bezeichnungsfeld gleich mit, das die Beschriftung des Steuerele- ments enthält. In der Optionsgruppe aus Abbildung 19 sind das gleich vier Stück ge- wesen: „Zuordnung“, „Student“, „Professor“ und „Extern“. Alles sind eigene Steuere- lemente, die praktischerweise mit den „wirklichen“ Steuerelementen, also den zugehö- rigen Text- oder Optionsfeldern dergestalt verbunden sind, daß ein Klick auf das Be- zeichnungsfeld genügt, um das zugehörige „echte“ Steuerelement zu betätigen.

Außerdem haben diese Bezeichnungsfelder einen riesigen Vorteil: Sie können mit ih- nen Tastaturkürzel festlegen. Sie kennen das ja aus allen anderen Windows-Anwen- dungen, in denen Sie den Klick auf ein Element in aller Regel ersetzen können durch die Tastenkombination Alt+<Unterstrichener Buchstabe>. Wenn der Text vor einem Steuerelement also „Name:“ lautet, können Sie mit Alt+m dieses Steuerelement akti- vieren.

Kinderleicht können Sie das auch für Ihre Access-Anwendungen verwenden und sie so wesentlich benutzerfreundlicher gestalten. Dazu müssen Sie nur im Beschriftungstext vor den zu unterstreichenden Buchstaben das Zeichen „&“ setzen. Im obigen Bei- spiel würde der Text also „Na&me:“ lauten. Um den Text zu ändern, klicken Sie am einfachsten so oft in das Bezeichnungsfeld, bis ein blinkender Cursor erscheint. Alter- nativ können Sie auch die Eigenschaft „Beschriftung“ des Bezeichnungsfeldes än- dern. Schon in der Entwurfsansicht wird das Bezeichnungsfeld dann mit dem unterstri- chenen Buchstaben angezeigt.

Achten Sie bei dieser Methode aber darauf, daß Sie keine Tastaturabkürzungen mehr- fach vergeben, sonst ist das Mehr an Benutzeraufwand gleich wieder im Eimer. Au- ßerdem sollten keine gleichen Kürzel in Bezeichnungsfeldern und Menüleiste vor- kommen, weil die Menüs ebenfalls mit Alt+<Unterstrichener Buchstabe> bedient wer- den können.

4.3.5. Befehlsschaltflächen

Sie können in Access auch Befehlsschaltflächen in Ihre Formulare einbauen, um dem Benutzer bestimmte Aktionen zu erleichtern. Die meisten Grundfunktionen bietet Ih- nen der Steuerelementassistent an, so daß Sie dafür gar nicht programmieren müssen, sondern einfach mit der entsprechenden Schaltfläche aus der Toolbox bei aktiviertem Assistenten eine Befehlsschaltfläche einfügen.

Auch hier können Sie mit dem „&“-Zeichen eine Tastenkombination für Ihre Be- fehlsschaltfläche einführen. Zudem haben Sie die Möglichkeit, Ihre Schaltfläche zur Standard-Schaltfläche Ihres Formulars zu machen (diese wird mit dickerem Rand dargestellt und reagiert auf die Eingabetaste), indem Sie die Eigenschaft „Bei Einga- betaste“ auf „Ja“ setzen. Auch wenn Sie Ihre Schaltfläche als Abbruch-Schaltfläche verwenden möchten (laut Windows-Standard wird diese mit der Esc-Taste ausgelöst), können Sie dazu die Eigenschaft „Bei Taste Esc“ auf „Ja“ setzen.

24

Access 2.0 für Fortgeschrittene

Für später, wenn Sie einmal Ihr erstes Makro geschrieben haben, gibt es noch eine einfache Möglichkeit, eine Befehlsschaltfläche zu erstellen: Sie ziehen einfach das Ma- kro, das Sie durch die Schaltfläche aufrufen lassen möchten, aus dem Datenbankfen- ster in Ihr Formular.

4.3.6. Berechnete Felder in Formularen und Berichten

Alle diese Steuerelemente müssen nicht direkt auf einem Feld der Tabelle oder Abfrage basieren, sondern können auch aus verschiedenen Feldern berechnet werden. Dazu tragen Sie in die Eigenschaft „Steuerelementinhalt“ des zu berechnenden Steuere- lements zunächst ein „=“ ein, und dann die Formel für die Berechnung. Möchten Sie beispielsweise in einem Textfeld eines Formulars den Preis, der im Feld „Stückpreis“ (Eigenschaft „Feldname“ des Formularfeldes oder das entsprechende Feld der Tabelle oder Abfrage) gespeichert ist, mit 0,15 multiplizieren, um die Mehrwertsteuer anzu- zeigen, so tragen Sie in die Eigenschaft „Steuerelementinhalt“ des Mehrwertsteuerfel- des folgendes ein: =[Stückpreis] *0,15.

Sie können dabei sogar auf Werte in anderen Formularen zugreifen, indem Sie den vollen „Pfad“ zu dem entsprechenden Steuerelement eintragen. Wenn Sie also den Steuersatz nicht fest vorgeben wollen, sondern in einem anderen Formular „Allgemeines“, das gerade geöffnet ist, im Feld „Steuersatz“ eingetragen haben, lautet die Formel =[Stückpreis]*[Formulare]![Allgemeines]![Steuer- satz].

Hierbei dienen die Ausrufezeichen dazu, den Pfad vom sog. Eltern-Objekt zum Kind-Objekt anzuzeigen: „Formulare“ ist ein Eltern-Objekt, das als „Kinder“ alle momentan geöffneten Formulare, also auch das Formular „Allgemeines“ enthält. Das Formular „Allgemeines“ ist wiederum Eltern-Objekt zum Steuerelement „Steuersatz“, das in ihm enthalten ist. Zwischen dem Eltern- und dem Kind-Objekt muß immer ein Ausrufezeichen stehen. Möchten Sie in einer Formel nicht auf den Wert des Steuere- lements selbst, sondern auf eine Eigenschaft zugreifen (z.B., wenn Sie in einem Text- feld die Datensatzherkunft des Kombinationsfeldes „Kombi“ anzeigen möchten), müs- sen Sie zwischen dem Steuerelementnamen und der Eigenschaft einen Punkt als Trennzeichen verwenden: =[Kombi].[Datensatzherkunft].

Besonders trickreich wird es, wenn Sie auf Werte aus einem Unterformular zugrei- fen möchten. Ein Unterformular ist für Access im Grunde genommen nichts anderes als ein gewöhnliches Steuerelement und kein Formular. Wenn Sie also auf ein Feld „Rückgabedatum“ im Unterformular „Ausleihen_U“ (das muß der Feldname des Un- terformulars im Hauptformular sein) zugreifen möchten, das im Hauptformular „Ausleihen“ enthalten ist, so lautet der korrekte Pfad zu diesem Feld [Formula- re]![Ausleihen]![Ausleihen_U].[Formular]![Rückgabedatum]:

Das Steuerelement „Ausleihen_U“ (vom Typ Unterformular) hat eine Eigenschaft „Formular“, die das Formular-Objekt dieses Unterformulars enthält und so Eltern- Objekt zum Steuerelement „Rückgabedatum“ ist. Klingt irre kompliziert, aber wenn man es einmal abgetippt hat, geht es schon besser.

4. Vertiefung: Formulare und Berichte

25

Das Ergebnis von Berechnungen muß dabei nicht unbedingt in Textfeldern ausge- geben werden, sondern kann ebensogut z.B. in einer Optionsgruppe dargestellt wer- den, indem die Formel dort in die Eigenschaft „Steuerelementinhalt“ eingetragen wird. Dafür sollte die Berechnung einen ganzzahligen Wert ergeben, der einem Opti- onswert der Optionsgruppe entspricht.

Wenn Sie z.B. darstellen möchten, ob ein Kunde ein guter (mehr als 10.000 DM Um- satz) oder ein schlechter (weniger als 10.000 DM) Kunde ist, dann erstellen Sie eine Optionsgruppe mit den beiden Optionsfeldern „Guter Kunde“ (Optionswert 1) und „Schlechter Kunde“ (Optionswert 2), und tragen Sie in die Eigenschaft „Steuerele- mentinhalt“ folgende Formel ein: =Wenn([Umsatz]>10000;1;2). Diese Formel ergibt 1, wenn der Umsatz größer als 10.000 ist, und 2, wenn nicht. Je nach dem Inhalt des Feldes „Umsatz“ ändert sich jetzt die Darstellung der Optionsgruppe.

4.3.7. Die Domänenfunktionen

Eine besondere Art von Formeln, die Sie in berechneten Feldern (in Formularen, Be- richten und Abfragen) verwenden können, sind die sog. Domänen(aggregat)funktio- nen. Mit ihrer Hilfe können Sie bei jeder Gelegenheit auf Informationen aus Ihrer Da- tenbank zugreifen, ohne daß der jeweilige Wert in der aktiven Abfrage oder im aktiven Formulars enthalten ist. Unter einer Domäne ist dabei entweder eine Tabelle oder ei- ne Abfrage zu verstehen.

Diese Domänenfunktionen sind:

DomWert("Feldname/Formel"; "Domäne"[; "Kriterien"]): Ermittelt einen einzelnen Wert aus einer Domäne (oder berechnet ihn, wenn Sie eine Formel eingeben). Beispiel: DomWert("Lesergruppe"; "Leser"; "[Leser-Nr] = Forms!Ausleihen![Leser-Nr]") ermittelt die Lesergruppe des Lesers, der gerade im Formular „Ausleihen“ angezeigt wird.

DomAnzahl("Feldname/Formel"; "Domäne"[; "Kriterien"]): Be- stimmt die Anzahl von Datensätzen in der angegebenen Domäne, die die angegebenen Kriterien erfüllen. Wenn Sie keine Kriterien angeben, wird die Anzahl aller Datensätze in der Domäne bestimmt: DomAn- zahl("[Ausleihen-ID]"; "Ausleihen") ermittelt die Gesamt- anzahl aller Ausleihvorgänge aus der Tabelle „Ausleihen“.

Entsprechend existieren die Funktionen DomMittelwert, DomSumme, DomMin, DomMax und die übrigen Aggregatfunktionen, die Sie auch aus den Gruppierungen in Abfragen kennen.

Beispielsweise könnten Sie in das Formular „Lesereingabe“ ein Feld aufnehmen, das die Gesamtanzahl von Ausleihvorgängen dieses Lesers anzeigt. Als „Steuerelement- inhalt“ müßten Sie dann folgendes eintragen: DomAnzahl("Ausleihen-ID"; "Ausleihen"; "[Leser-Nr] = Forms!Lesereingabe![Leser- Nr]").

26

Access 2.0 für Fortgeschrittene

Bitte beachten Sie, daß Sie bei der Eingabe von Kriterien in Domänenfunktionen nur die englische Schreibweise verwenden können, d.h. „And“ statt „Und“, „Or“ statt „Oder“. Insbesondere heißt das Eltern-Objekt „Formulare“ hier „Forms“. Ein beson- ders abschreckendes Beispiel hierfür finden Sie unten im Abschnitt 5.4, „Bedingungen in Makros“ auf Seite 42.

4.3.8. Die Feldreihenfolge

Wenn Sie jetzt in eigene Formulare ein paar Steuerelemente eingefügt haben und in die Formularansicht gewechselt sind, ist Ihnen vielleicht aufgefallen, daß die Reihenfolge, in der die Felder mit der Tabulator-Taste angesprungen werden, der chronologischen Reihenfolge der Felderstellung, nicht aber der Position der Felder im Formular ent- spricht. Das ist für einen Benutzer enorm verwirrend.

Dem können Sie abhelfen, indem Sie in der Entwurfsansicht des Formulars den Menü- befehl „Bearbeiten/Feldreihenfolge“ wählen. In der Dialogbox, die erscheint, können Sie entweder in der Liste aller Feldnamen die Reihenfolge von Hand festlegen, oder Sie klicken auf die Schaltfläche „Automatisch“, damit Access die Reihenfolge auto- matisch von links nach rechts und von oben nach unten festlegt. Theoretisch könnten Sie das auch mit der Eigenschaft „Reihenfolgenposition“ jedes einzelnen Steuerele- mentes lösen; davon ist aber abzuraten, weil der Zeitaufwand dafür immens wäre.

4.4. Die wichtigsten Eigenschaften

Im folgenden Abschnitt sollen die wichtigsten Eigenschaften von Formularen, Berich- ten, Formular- und Berichtsbereichen sowie von Steuerelementen aufgelistet und kurz erklärt werden. Weitere Informationen erhalten Sie, wie immer, in der Online-Hilfe, indem Sie die fragwürdige Eigenschaft im Eigenschaftenfenster aktivieren, und dann F1 drücken.

In diesen Listen sind die Eigenschaften in der Reihenfolge ihrer Aufstellung im Eigen- schaftenfenster mit der Einstellung „Alle Eigenschaften“ aufgelistet, wobei die Ereig- nis-Eigenschaften erst unten im Abschnitt 6.3.1, „Die wichtigsten Ereignisse“ auf Seite 48 erläutert werden und hier daher fehlen.

4.4.1. Formulareigenschaften

Für Formulare als ganzes gibt es eine Fülle von Eigenschaften, von denen hier natür- lich nur die wichtigsten, praktisch relevanten aufgezählt werden. Eigenschaften, die Sie mit der Maus verändern (Größe etc.), sind ebenfalls aus Platzgründen nicht aufgeführt; sie erklären sich aber selbst. Falls noch irgendwelche Fragen offenbleiben sollten, schauen Sie einfach in der Online-Hilfe zu der entsprechenden Eigenschaft nach.

Tabelle 1: Die wichtigsten Formulareigenschaften

Eigenschaft

Beschreibung

Datenherkunft

Enthält die Tabelle, Abfrage oder den SQL-Code, die die Daten für das Formular zur Verfügung stellen. Sie können

4. Vertiefung: Formulare und Berichte

27

Eigenschaft

Beschreibung

 

diese Datenquelle bearbeiten, indem Sie auf die Schaltfläche mit den drei Punkten klicken, die hinter der Eigenschaft ange- zeigt werden. Der SQL-Code wird vom Formularassistenten erzeugt.

Beschriftung

Enthält den Text, der in der Titelleiste des Formulars in der Formularansicht angezeigt wird.

Bildlaufleisten

Gibt an, welche Bildlaufleisten (Rollbalken, Scrollbars) in Ih- rem Formular angezeigt werden: Horizontal, vertikal, beide oder keine. Das ist letztlich eine Geschmacksfrage.

Datensatzmarkierer

Gibt an, ob der Datensatzmarkierer am linken Rand des For- mulars angezeigt werden soll. Das ist auch eine ästhetische Frage: Wenn Sie ein Formular darstellen, das lediglich als Dialogbox dient und keine eigenen Daten enthält, wäre es un- sinnig, einen Datensatzmarkierer darzustellen.

Außerdem kann es manchmal hilfreich sein, den Datensatz- markierer zu verstecken, wenn Sie den Benutzer daran hin- dern möchten, einen Datensatz zu markieren (und dann zu lö- schen). Dann müssen Sie diesen Befehl aber auch aus der Menüleiste entfernen und die Tastenkombination Shift+Leer- taste abfangen (siehe unten Abschnitt 6.6, „Ändern der Ta- staturbelegungen“ auf Seite 58).

Navigationsschalt-

Gibt an, ob die Navigationsschaltflächen am unteren Formu- larrand dargestellt werden sollen oder nicht. Wieder eine nur ästhetische Frage.

flächen

Rahmenart, Mit Systemmenüfeld, Mit Min Schaltfläche, Mit Max Schaltfläche

Beschreiben das Aussehen Ihres Formularrahmens. Sie kön- nen den Benutzer so an unüberlegten Handlungen hindern und das Design Ihrer Anwendung verbessern. Beispielsweise wur- de in der Beispielanwendung für das Hauptmenü-Formular die Rahmenart auf „keiner“, sowie die drei anderen Eigenschaften auf „Nein“ gesetzt, so daß kein Fensterrand sichtbar ist.

4.4.2. Berichtseigenschaften

Für Berichte gibt es lediglich zwei Eigenschaften, die nicht schon bei den Formularei- genschaften erklärt worden sind und trotzdem noch interessant sind:

Tabelle 2: Die wichtigsten Berichtseigenschaften

Eigenschaft

Beschreibung

Seitenkopf, Seitenfuß

Geben an, unter welchen Bedingungen die entsprechenden

28

Access 2.0 für Fortgeschrittene

Eigenschaft

Beschreibung

 

Bereiche angezeigt werden. Wenn Sie beispielsweise für die erste Seite eines Berichts einen anderen Kopf wünschen als für die folgenden, sollten Sie den Kopf für die erste Seite in den Berichtskopf eintragen, den für die folgenden Seiten in den Seitenkopf, und dann im Bericht die Eigenschaft „Seitenkopf“ auf „Außer Berichtskopf“ setzen.

4.4.3. Bereichseigenschaften

Sowohl Formulare als auch Berichte sind in „Bereiche“ gegliedert, z.B. ein Formular in die drei Bereiche „Formularkopf“, „Formularfuß“ und „Detailbereich“, oder in ei- nem Bericht viel mehr: „Berichtskopf“ (wird am Anfang des Berichts angezeigt), „Seitenkopf“ (am Anfang jeder Seite des Berichts), „xxx-Kopfbereich“ (Falls Sie mit Gruppierungen arbeiten; wird am Beginn jeder neuen Gruppe angezeigt), „Detailbereich“ (für jeden einzelnen Datensatz), und dann die drei ersten noch einmal als Fußbereiche. Jeder dieser vielen Bereiche hat eigene Eigenschaften, von denen le- diglich zwei wirklich interessant sind, und auch das nur bei Berichten:

Tabelle 3: Die wichtigsten Bereichseigenschaften

Eigenschaft

Beschreibung

Verkleinerbar,

Diese Eigenschaften geben an, ob der Bereich „schrumpft“, wenn keine Daten in ihm angezeigt werden (verkleinerbar) oder „wächst“, wenn die Daten z.B. eine Textfeldes umbro- chen werden, so daß eine zusätzliche Zeile erforderlich wird. Dazu muß die gleiche Eigenschaft des betreffenden „ge- fährdeten“ Textfeldes ebenfalls auf „Ja“ gestellt werden.

Vergrößerbar

4.4.4. Steuerelementeigenschaften

Im folgenden Kapitel sollen die wichtigsten Eigenschaften, die alle Steuerelemente be- treffen, kurz erläutert werden. Wichtige Eigenschaften, die nur bei bestimmten Steue- relementtypen existieren, wurden dort bereits angesprochen.

Tabelle 4: Die wichtigsten Steuerelementeigenschaften

Eigenschaft

Beschreibung

Name

Gibt den Namen des Steuerelements an. Diesen Namen benö- tigen Sie z.B., wenn Sie mit Hilfe des Inhaltes dieses Steuere- lementes Berechnungen durchführen möchten.

Vorsicht: Vergeben Sie sicherheitshalber als Steuerelement- namen nicht „Name“; ein Bericht oder Formular hat nämlich

4. Vertiefung: Formulare und Berichte

29

Eigenschaft

Beschreibung

 

eine gleichlautende (interne) Eigenschaft, die dann bei Ver- weisen in Berechnungen fälschlicherweise herangezogen wür- de.

Außerdem sollten Sie vorsichtig sein, wenn ein berechnetes Steuerelement einen Namen trägt, der mit einem Feldnamen der Tabelle oder Abfrage, auf der das Formular beruht, über- einstimmt. Dann kann sich Access nämlich bei der Berech- nung im Kreise drehen, weil es während der Berechnung des

Steuerelements schon auf dessen Inhalt zugreift, dafür diesen

aber erst berechnen muß etc „#Fehler!“.

Im Formular erscheint dann

Steuerelementinhalt

Gibt an, an welches Feld der Datenherkunft das Formular das Steuerelement gebunden ist. Hier ist der Platz, um den Aus- druck für eine Berechnung einzutragen.

Format,

Entspricht den gleichnamigen Eigenschaften im Tabellenent- wurf: Format steht also für die Art der Datenausgabe, Einga- beformat, Gültigkeitsregel und Gültigkeitsmeldung für die Eingabemaske, nach der der Benutzer Daten eingeben muß. Diese Eigenschaften gelten natürlich nur bei der Eingabe über das Formularfeld.

Eingabeformat,

Gültigkeitsregel,

Gültigkeitsmeldung

Standardwert

Entspricht ebenfalls der gleichnamigen Eigenschaft im Tabel- lenentwurf, d.h. sie gibt vor, welcher Wert in dieses Feld ein- getragen wird, wenn ein neuer Datensatz in diesem Formular angelegt wird.

Der Unterschied ist, daß der Standardwert im Tabellenentwurf für alle Eingaben in dieses Feld gilt, während der Standard- wert im Steuerelement nur für Eingaben über dieses Steuere- lement gilt. Bestehen in Tabellenfeld und Steuerelement ver- schiedene Standardwerteinstellungen, so „gewinnt“ die des Steuerelements.

Statuszeilentext

Enthält den Text, der in der Statuszeile am unteren Bild- schirmrand angezeigt wird, während das Steuerelement aktiv ist. Tragen Sie dort am besten irgendwelche tröstenden, hilf- reichen Kommentare ein.

Sichtbar

Sehr praktische Eigenschaft: Damit können Sie ein Steuere- lement verstecken. Es wird dann zwar nicht angezeigt, Sie können aber dennoch per Makro Veränderungen des Wertes vornehmen oder in berechneten Feldern darauf verweisen.

Aktiviert, Gesperrt

Beide sind genauso praktisch: Um ein Steuerelement zwar an-

30

Access 2.0 für Fortgeschrittene

Eigenschaft

Beschreibung

 

zuzeigen, dem Benutzer aber keine Möglichkeit zu geben, dessen Inhalt zu verändern (und auch den Cursor nicht in die- ses Feld zu bewegen), müssen Sie die Eigenschaft „Aktiviert“ auf „Nein“ und „Gesperrt“ auf „Ja“ setzen.

Nur die erste Einstellung bewirkt, daß das Steuerelement grau dargestellt wird und ebenfalls nicht verändert werden kann; die zweite Einstellung alleine läßt zwar den Cursor noch in das Steuerelement setzen (z.B. um darin zu suchen), aber erlaubt ebenfalls keine Änderungen am Inhalt.

In Reihenfolge

Wenn Sie diese Eigenschaft auf „Nein“ setzen, wird das Steu- erelement nicht in der Standard-Tabulator-Reihenfolge angesprungen, sondern kann nur direkt mit der Maus oder mit der Tastaturabkürzung angesprochen werden. Verwenden Sie diese Einstellung z.B. für Befehlsschaltflächen.

Vergrößerbar,

Erlaubt es dem Steuerelement, zu „schrumpfen“, wenn keine Daten in ihm enthalten sind, bzw. vertikal zu „wachsen“, wenn die Daten den vorgegebenen Rahmen sprengen. Sehr hilfreich in Berichten, wenn Daten nicht abgeschnitten sondern umbro- chen werden sollen.

Wenn Sie „Vergrößerbar“ bei einem Steuerelement auf „Ja“ setzen, wird automatisch die gleiche Eigenschaft beim zuge- hörigen Berichtsbereich auch auf „Ja“ gesetzt.

Verkleinerbar

Layout-Eigenschaften

Alle diese Eigenschaften verändern Sie am einfachsten mit der Palette (Siehe Abschnitt 4.2, Die Palette, auf Seite 23) bzw. mit der Symbolleiste des Formularentwurfes.

Das waren eigentlich schon die wichtigsten Eigenschaften von allen Elementen in Ac- cess. Diejenigen, die in diesen Liste nicht aufgetaucht sind, habe ich größtenteils selbst noch nie gebraucht.

5. Einführung in die Makroprogrammierung

Wenn Sie alles berücksichtigt haben, was Sie bis hierher gelernt haben, brauchen Ihre Anwender immer noch Kenntnisse in Access, um mit Ihrer Datenbankanwendung um- zugehen; Sie müssen sich im Datenbankfenster auskennen und wissen, welches For- mular sie für welche Tätigkeit öffnen müssen usw. Jetzt kommt der große Schritt in Richtung Benutzerfreundlichkeit: Die Makroprogrammierung.

5. Einführung in die Makroprogrammierung

31

5.1. Was sind Makros?

Makros sind im Prinzip nichts als aneinander gehängte Benutzerbefehle, die Access automatisch ausführt. Alles, was Sie als geübter Access-Benutzer machen können, kann auch über ein Makro erledigt werden. Allerdings ist das nicht ganz so einfach wie z.B. in WinWord, wo Sie ein Makro einfach aufzeichnen können, das dann gespeichert und wieder abgespielt wird. Vielmehr müssen Sie selbst ein bißchen programmieren.

Die Grundbausteine der Makros, also die einzelnen Befehle, heißen in Access „Aktionen“. Eine solche Aktion ist z.B. „ÖffnenFormular“. Jeder Aufruf einer Aktion hat eigene „Parameter“; sie können die Aktion „ÖffnenFormular“ also mit verschie- denen Formularnamen und Fenstermodi aufrufen.

Makros sind eine Objektkategorie von Access, so wie es Tabellen, Abfragen und For- mulare auch sind. Sie werden also unter einem bestimmten Namen abgespeichert und stehen dann im Datenbankfenster in der Kategorie „Makros“.

Für eine größere Datenbankanwendung benötigen Sie ohne weiteres einmal 100 oder mehr einzelne kleine Makros, die Formulare öffnen, Daten filtern, Fenster schließen, automatisch Werte anpassen etc. Damit Ihr Datenbankfenster nicht überläuft und Sie noch ein bißchen den Überblick bewahren können, empfiehlt es sich, thematisch zu- sammenhängende Makros (z.B. alle, die mit einem Formular verknüpft sind) in einer sog. „Makrogruppe“ zusammenzufassen, die dann am besten noch den Namen des zugehörigen Formulars trägt.

Näheres sehen Sie gleich an einem Beispiel.

5.2. Die Makro-Entwurfsansicht

Abbildung 20 zeigt die Entwurfsansicht Ihres ersten Makros. Diese Entwurfsansicht ähnelt optisch sehr dem Tabellenentwurf (was die Gliederung in drei Bereiche anbe-

Abbildung 20: Die Makro-Entwurfsansicht

Abbildung 20: Die Makro-Entwurfsansicht

32

Access 2.0 für Fortgeschrittene

langt), so daß Ihnen die Orientierung darin leicht fallen sollte.

Die wichtigste Spalte in dieser Entwurfsansicht ist die „Aktionen“-Spalte. Hier kön- nen Sie nacheinander die Aktionen eintragen, die Access ausführen soll, wenn das Ma- kro aufgerufen wird. Für die Auswahl der Aktionen steht Ihnen ein Kombinationsfeld zur Verfügung, so daß Sie sich die Aktionsnamen nicht merken müssen. Die meisten Namen sind ohnehin selbsterklärend; falls Sie Fragen zu einer bestimmten Aktion ha- ben, wählen Sie sie im Makroentwurf aus, und drücken Sie F1, um die Online-Hilfe zu dieser Aktion und ihren Parametern zu sehen.

Im Detailbereich unten links im Bild werden die einzelnen Parameter für die gerade ausgewählte Aktion angezeigt (im Beispiel die Parameter der Aktion „ÖffnenFormu- lar“ in der vierten Zeile).

Die Kommentar-Spalte ist ebenfalls sehr wichtig. Die Erfahrung hat gezeigt, daß man sich spätestens nach einem halben Jahr nicht mehr daran erinnern kann, wofür eine be- stimmte Makrozeile einmal gut war. Daher sollten Sie Ihre Makros unbedingt aus- führlich kommentieren.

Die beiden ersten Spalten, „Makroname“ und „Bedingung“, tauchen bei Ihnen vielleicht gar nicht auf. Sie können Sie über die Symbolleiste mit den Symbolen

auf. Sie können Sie über die Symbolleiste mit den Symbolen „Makronamen“ ( ) bzw. „Bedingungen“ (
auf. Sie können Sie über die Symbolleiste mit den Symbolen „Makronamen“ ( ) bzw. „Bedingungen“ (

„Makronamen“ ( ) bzw. „Bedingungen“ ( ) anzeigen lassen.

„Makronamen“ enthält die Namen von Makros innerhalb einer Makrogruppe. Wenn Sie ein Makro alleine abspeichern (nicht in einer Makrogruppe), dann benötigen Sie die Spalte „Makronamen“ nicht, sondern speichern einfach das gesamte Makro unter diesem einen Namen. Im Beispiel wurde eine Makrogruppe „Lesereingabe“ er- stellt, die alle Makros enthalten soll, die einmal mit dem Formular „Lesereingabe“ ver- knüpft werden. Die Namen müssen nicht gleich sein, aber es erleichtert die Orientie- rung ungemein.

Im Beispiel bestehen also bereits zwei Makros in dieser Makrogruppe: Eines heißt „Lesereingabe.Schließen“, und eines „Lesereingabe.Ausleihen zeigen“. Das Makro „Lesereingabe.Schließen“ schließt zuerst das Lesereingabe-Formular und gibt dann ei- ne Meldung aus; „Lesereingabe.Ausleihen zeigen“ öffnet das Ausleihen-Formular für den entsprechenden Leser, der gerade im Lesereingabe-Formular aktiv ist.

Außerdem ist die Spalte „Bedingungen“ sehr interessant: Sie können für eine Aktion bestimmen, daß sie nur dann ausgeführt wird, wenn eine bestimmte Bedingung erfüllt ist. Dazu kommt aber später mehr im Abschnitt 5.4, Bedingungen in Makros, auf Seite

42.

5.3. Die wichtigsten Aktionen

Hier werden Ihnen kurz die wichtigsten Aktionen, die Sie zum Arbeiten brauchen, mit ihren Parametern vorgestellt. Falls Sie weitergehende Fragen haben, finden Sie die Antworten in der Online-Hilfe zum Thema „Aktionen“, wo Sie auch ein komplettes Aktionsverzeichnis mit allen 47 Aktionen finden. Die vergleichsweise geringe Anzahl von Aktionen darf nicht darüber hinweg täuschen, daß Sie damit praktisch alle Benut-

5. Einführung in die Makroprogrammierung

33

zereingaben imitieren können. Hier nun eine Auswahl der praktisch am häufigsten ge- brauchten Aktionen in alphabetischer Reihenfolge:

Tabelle 5: Die wichtigsten Aktionen in Makros

Aktion

Beschreibung

AbbrechenEreignis

Bricht das Ereignis, von dem aus das Makro gestartet wurde, ab. Wenn Sie z.B. ein Makro mit der Aktion „AbbrechenEreig- nis“ von dem Ereignis „Beim Löschen“ eines Formulars aufru- fen lassen, wird jeder Löschvorgang des Benutzers abgebro- chen. Sie können diese Aktion auch mit einer Bedingung verse- hen, die eine Sicherheitsabfrage ausführt („Wollen Sie wirklich löschen?“) und bei der Antwort „Nein“ den Vorgang abbre- chen. (keine Parameter)

AusführenMakro

Führt ein Access-Makro aus. So können Sie bereits geschriebe- ne Makros an anderen Stellen „recyclen“. Wichtig ist dies vor allem, wenn Sie geschachtelte Bedingungen verknüpfen wollen (s.u.). Einziger wichtiger Parameter: Name des auszuführenden Makros

AusführenMenü-

Führt einen beliebigen Access-Menübefehl aus. Das ist die vielseitigste Makro-Aktion, weil Sie mit ihr praktisch alle Ac- cess-Befehle erreichen. Voraussetzung ist aber, daß der Menü- befehl in der Situation, in der die Aktion ausgeführt wird, tat- sächlich verfügbar wäre; wäre der Befehl dort deaktiviert (grau dargestellt), können Sie ihn auch nicht von einem Makro aus aufrufen. Parameter sind:

Menüleiste: Access stellt Ihnen bekanntlich überall verschiedene Menüleisten zur Verfügung (im Ta- bellenentwurf andere als in der Formularansicht etc.). Mit diesem Parameter wählen Sie aus, in wel- cher Menüleiste sich der gewünschte Befehl befin- det

befehl

Menüname, Befehl, Unterbefehl: Beschreiben, wo der Befehl in der Menüleiste enthalten ist.

Beenden

Beendet Access und damit auch Ihre Anwendung. Diese Akti- on sollten Sie in Ihrer Anwendung als einzige Möglichkeit zur Verfügung stellen, um die Anwendung zu schließen, damit un- bedarfte Benutzer nicht plötzlich vor dem leeren Access- Fenster sitzen. Zum Beenden finden Sie mehr im Abschnitt 8.3, „Kontrolle über das Programmende“ auf Seite 67.

Meldung

Gibt ein Meldungsfenster aus, das der Benutzer mit Klick auf

34

Access 2.0 für Fortgeschrittene

Aktion

Beschreibung

 

den „OK“-Button verlassen muß. Diese Aktion ist sehr hilf- reich, um eigene Makros zu testen, indem Sie einfach nach je- der Aktion eine Meldungs-Aktion einfügen, die bestimmte Werte ausgibt. Wichtigster Parameter ist „Meldung“: Er enthält den Text der Meldung, der auch ein Ausdruck sein kann, z.B.:

="Der Wert des Feldes Leser-Nr ist gerade" & [Leser-Nr]

Mit der Meldungs-Aktion können Sie aber keine Ja/Nein- Abfragen zur Programmsteuerung verbinden (dazu mehr in Abschnitt 5.4, „Bedingungen in Makros“ auf Seite 42)

ÖffnenAbfrage,

Diese Aktionen öffnen ein Access-Objekt des angegebenen Typs. Sie können jeweils den Namen des Objekts angeben, sowie den Modus (Entwurf, Datenblatt oder Seitenansicht). Wenn Sie Aktionsabfragen mit dieser Aktion öffnen, werden sie ausgeführt. Beim Öffnen von Berichten und Formularen können Sie zusätzlich einen Filter oder eine Bedingung ange- ben, der bzw. die nur bestimmte Daten ausgibt. Im Beispiel von Abbildung 20 wurde als Bedingung folgender Text eingegeben:

[Leser-Nr]=[Formulare]![Lesereingabe]![Le-

ÖffnenBericht,

ÖffnenFormular,

ÖffnenTabelle

ser-Nr]

Das bewirkt, daß hier beim Öffnen des Formulars „Ausleihen“ nur der Datensatz des Lesers angezeigt wird, der gerade auch im Lesereingabe-Formular aktiv ist.

Bei Formularen können Sie außerdem einen Fenstermodus vor- geben. Das ist vor allem dann wichtig, wenn Sie unmittelbar nach dem Schließen des mit der Aktion geöffneten Formulars eine weitere Aktion vornehmen möchten (z.B. einen Wert ak- tualisieren). Dafür müssen Sie als Fenstermodus „Dialog“ eintragen, damit Ihr Makro nach dem Öffnen des Formulars nicht gleich weiter ausgeführt wird, sondern angehalten wird, bis das Fenster geschlossen wird.

Außerdem können Sie ein Formular im Modus „Ausgeblen- det“ öffnen, so daß das Formular zwar geladen ist (und Sie in Formeln auf dessen Felder zugreifen können), aber nicht ange- zeigt wird. Das ist besonders dann interessant, wenn Sie be- stimmte globale Werte (MwSt-Satz und ähnliches) nicht in je- der Berechnung von Hand eintragen (und bei einer Steuerrecht- sänderung überall einzeln ändern) möchten, sondern an einem zentralen Ort speichern, wo Sie den Wert nur einmalig ändern müssen. Dafür öffnen Sie ein Formular „Allgemeines“ o.ä., das diese Werte enthält, zu Beginn der Anwendung ausgeblen-

5. Einführung in die Makroprogrammierung

35

Aktion

Beschreibung

 

det, und greifen in Berechnungen nur auf Werte aus diesem Formular zu

Schließen

Schließt ein Objekt. Wenn Sie keine Parameter angeben, wird das aktive Objekt geschlossen, ansonsten das, welches Sie mit den Parametern festlegen.

SetzenWert

Das ist die wichtigste Aktion für Datenveränderung. Mit dieser Aktion können Sie jeden beliebigen Wert eines Steuere- lements und sogar einer Steuerelementeigenschaft verändern.

Das ist zum einen interessant, um auf Knopfdruck bestimmte Werte in bestimmte Felder einzutragen, um den Benutzern Arbeit zu ersparen, zum andern kann über die Veränderung von Eigenschaften zur Laufzeit das Aussehen des Formulars verän- dert werden. Sie können z.B. auf Knopfdruck ein Steuerele- ment verschwinden lassen, indem Sie die Eigenschaft „Sichtbar“ dieses Steuerelements mit der Aktion „SetzenWert“ auf „Nein“ setzen.

Parameter sind der Name des Steuerelements bzw. der Eigen- schaft (z.B.: Steuerelementname.Sichtbar), sowie der neue Wert des Elementes oder der Eigenschaft, der auch eine Formel enthalten und so Werte aus anderen Steuerelementen mit einbeziehen kann (hier muß ausnahmsweise das =-Zeichen am Beginn der Formel weggelassen werden).

StopAlleMakros,

Diese beiden Aktionen dienen dazu, die Ausführung des aktu- ellen bzw. aller momentan laufenden (wenn mit der Aktion „AusführenMakro“ weitere Makros gestartet wurden) Makros abzubrechen. Häufig wird diese Aktion nach der Aktion „AbbrechenEreignis“ verwendet, um jegliche Aktivität erst einmal zu stoppen, beispielsweise, wenn der Benutzer bei einer Sicherheitsabfrage „Abbruch“ gewählt hat.

StopMakro

SuchenDatensatz,

Mit dieser Aktion können Sie einen Access-Suchbefehl ausfüh- ren lassen. Die Parameter kennen Sie alle aus dem „Suchen“- Dialogfeld, das Sie mit dem Menübefehl „Bearbeiten/Suchen“ erhalten.

Es empfiehlt sich, vor der Ausführung dieser Aktion zuerst mit der Aktion „GeheZuSteuerelement“ zu dem Steuerelement zu wechseln, in dem gesucht werden soll.

SuchenWeiter

Tastaturbefehle

Diese Aktion imitiert Tastendrücke des Benutzers. Das be- nötigen Sie, wenn Sie mit der Aktion „AusführenMenübefehl“ einen Menübefehl starten, der ein Dialogfenster öffnet. Die nö-

36

Access 2.0 für Fortgeschrittene

Aktion

Beschreibung

 

tigen Tasten, die dann gedrückt werden sollen, können Sie vor dieser „AusführenMenübefehl“-Aktion mit einer „Tastatur- befehle“-Aktion betätigen lassen.

Welche Abkürzung Sie für die Sondertasten der Tastatur (Alt, Strg u.a.) verwenden müssen, erfahren Sie in der Online- Hilfe zum Thema „SendKeys“.

Warnmeldungen

Mit dieser Aktion können Sie die Warnungen, die beispiels- weise das Ausführen einer Aktionsabfrage hervorruft („Diese Abfrage wird Daten verändern. Fortfahren?“), unterdrücken.

Seien Sie aber vorsichtig mit dieser Aktion und vergessen Sie nie, am Ende Ihres Makros die Warnmeldungen wieder einzu- schalten, weil sonst an anderer Stelle, wo Sie es vielleicht gerne hätten, auch nicht mehr gewarnt würde.

5.4. Bedingungen in Makros

Bisher haben Sie Makros nur unter allen Umständen ausführen lassen, also unabhän- gig von irgendwelchen äußeren Umständen. Häufig dürfen bestimmte Aktionen aber nur unter bestimmten Umständen ausgeführt werden; z.B. soll bei der Auslei- henerfassung eine Fehlermeldung erscheinen soll, wenn ein gerade ausgeliehenes Buch ein weiteres Mal ausgeliehen wird. Das Makro hierfür sehen Sie in Abbildung 21.

Diese Abbildung enthält die gesamte Makrogruppe, die zu dem Formular „Auslei- hen_U“ gehört.

Abbildung 21: Die Makrogruppe „Ausleihen“

Abbildung 21: Die Makrogruppe „Ausleihen“

5. Einführung in die Makroprogrammierung

37

5.4.1. Überprüfen, ob ein Buch schon ausgeliehen ist

Das erste Makro dieser Gruppe, „CheckBuch“, wird immer dann aufgerufen, wenn der Benutzer eine neue ausgeliehene Signatur eingetragen hat und das Feld dann verlassen will (dazu später mehr in Abschnitt 6.3.1, „Die wichtigsten Ereignisse“ auf Seite 48). Mit mit diesem Makro soll überprüft werden, ob das gerade ausgewählte Buch be- reits ausgeliehen ist. Wenn das der Fall sein sollte, erscheint eine Fehlermeldung, und der Ausleihvorgang wird abgebrochen.

Wie Sie sicher noch aus dem Abschnitt 3.2.2 auf Seite 11 wissen, ist ein Buch dann ausgeliehen, wenn es einen passenden Datensatz in der Tabelle „Ausleihen“ gibt, bei dem das Feld „Zurückgegeben“ auf „Nein“ steht. Hier können Sie nun Ihr Wissen über Domänenaggregatfunktionen aus Abschnitt 4.3.7, „Die Domänenfunktionen“ auf Seite 29 zum Einsatz bringen: Die Bedingung, unter der die Fehlermeldung angezeigt werden soll, lautet nämlich:

DomAnzahl("[Ausleihen-ID]"; "Ausleihen"; "Ausleihen.Sig- natur = Forms!Ausleihen!Ausleihen_U.Form!Signatur AND Ausleihen.[Zurückgegeben] = No") >= 1

Die Bedeutung dieser Bedingung ist nicht auf den ersten Blick zu durchschauen. Die DomAnzahl-Funktion ermittelt die Anzahl aller Datensätze in der Tabelle „Ausleihen“, bei denen als Signatur der aktuelle Inhalt des Feldes „Signatur“ im Unterformular „Ausleihen_U“ des Hauptformulars „Ausleihen“ eingetragen ist und bei denen gleich- zeitig im Feld „Zurückgegeben“ „Nein“ steht. Wenn diese Anzahl mindestens 1 ist, be- steht (mindestens) ein offener Ausleihvorgang, andernfalls nicht.

Wenn diese Bedingung zutrifft, wird eine Meldung ausgegeben, die dem Benutzer mitteilt, daß das Buch bereits verliehen ist. In der nächsten Zeile sehen Sie in der Be- dingungen-Spalte drei Punkte. Die besagen, daß die Bedingung der Zeile darüber auch für diese Zeile gelten soll. Alternativ hätte man die gleiche Bedingung noch ein- mal eintragen können, was aber mehr Tippzeit erfordert hätte.

Mit der Aktion „AbbrechenEreignis“ wird dann die Werteingabe abgebrochen, das Speichern des Datensatzes also verweigert, und schließlich mit „StopMakro“ die Ausführung des Makros beendet, ebenfalls noch unter der von der ersten Zeile über- nommenen Bedingung.

5.4.2. Verwenden von Sicherheitsabfragen für Makros

Wie Sie in der nächsten Zeile von Abbildung 21 sehen, können Sie Bedingungen auch für Sicherheitsabfragen verwenden. Dazu verwenden Sie die Funktion Meldung (nicht zu verwechseln mit der Aktion Meldung), die die Windows-Standard- Meldungsfenster anzeigt. Während die Aktion Meldung nur eine „OK“-Schaltfläche darstellen kann, ist die Funktion Meldung viel flexibler:

Das erste Argument ist der Text, der in dem Meldungsfenster erscheinen soll. Danach kommt, durch einen Strichpunkt getrennt, der Typ der Meldung, der sich aus verschie- denen Detailinformationen zusammenaddiert. Für nähere Informationen steht Ihnen die Online-Hilfe zur Funktion „Meldung“ gerne zur Verfügung. Im Beispiel bedeutet die

38

Access 2.0 für Fortgeschrittene

36, daß ein Fragezeichen-Symbol und die beiden Schaltflächen „Ja“ und „Nein“ ange- zeigt werden. Das dritte Argument ist die Überschrift, die das Meldungsfenster erhal- ten soll. Standardmäßig steht da „Microsoft Access“.

Das wirklich interessante an der Funktion Meldung ist, daß sie einen Wert zurück- liefert, der angibt, welche Schaltfläche der Benutzer bedient hat. 7 bedeutet „Nein“ (Näheres wieder in der Online-Hilfe), so daß die Bedingung übersetzt lautet: Wenn der Benutzer in dem Meldungsfenster, das so und so aussieht und den Text sowieso ent- hält, die Schaltfläche „Nein“ betätigt hat, dann führe die Aktion dieser Zeile aus.

Das Makro wird immer dann aufgerufen, wenn der Benutzer einen Datensatz aus dem Unterformular löschen, also einen irrtümlich aufgenommenen Ausleihvorgang rück- gängig machen will. Es ist also an das Ereignis „Beim Löschen“ geknüpft (dazu später mehr). Wenn nun der Benutzer einen Datensatz löschen möchte und damit das Makro startet, überprüft Access zuerst die Bedingung und öffnet dazu das Meldungsfen- ster. Wenn der Benutzer nicht löschen möchte, also nur irrtümlich auf die Entf-Taste geraten ist, wird der gesamte Vorgang mit AbbrechenEreignis und StopAlleMakros abgebrochen.

Hier zeigt sich der Vorteil der drei Punkte in der Bedingungsspalte: Wenn die Be- dingung von der vorhergehenden Zeile kopiert worden wäre, würde das Meldungsfen- ster ein zweites Mal erscheinen, bevor die Aktion „StopAlleMakros“ ausgeführt wür- de.

5.4.3. Verwenden von Alternativbedingungen

Bisher wurde nur gesagt, wie die Ausführung eines Makros daran geknüpft werden kann, daß eine bestimmte Bedingung vorliegt, nicht daran, daß sie nicht vorliegt. Das ist von erheblicher Bedeutung, wenn Sie etwa noch Aktionen vornehmen möchten, wenn der Benutzer in der von Ihnen angezeigten Sicherheitsabfrage „Ja“ ausgewählt hat.

Dafür existiert leider kein „Geheimcode“ wie die drei Punkte für die Fortsetzung einer Bedingung. Im Beispiel von Abbildung 21 wurde das aber durch einen einfachen Trick realisiert: Wenn die Bedingung der Sicherheitsabfrage eintritt (der Benutzer also „Nein“ gewählt hat), wird zuletzt die Aktion „StopMakro“ ausgeführt, so daß das Makro für diesen Fall beendet wird. Tritt die Bedingung aber nicht ein (d.h. es wird „Ja“ ausgewählt), wird (wegen der drei Punkte) nicht nur der Befehl „AbbrechenEreig- nis“, sondern auch der Befehl „StopMakro“ nicht ausgeführt, so daß das Makro in die- sem Fall noch weiter abläuft und die Aktion „SetzenWert“, die sich dahinter befindet, ausgeführt wird.

Damit ist wohl das wichtigste zu Bedingungen gesagt; Sie können natürlich alle Schlüsselwörter, die auch bei der Kriteriendefinition verwendet wurden, ebenfalls ver- wenden, insbesondere mehrere Bedingungen mit „Und“ und „Oder“ verknüpfen. Alles weitere erfahren Sie in der Online-Hilfe zum Thema „Ausdrücke in Bedingun- gen“.

6. Programmflußkontrolle

39

6. Programmflußkontrolle

Mit den Makros haben Sie jetzt schon das Grundhandwerkszeug zur Kontrolle des Programmflusses in der Hand. Wie Sie vielleicht schon gemerkt haben, macht Access einiges selber (worüber Sie natürlich froh sein können), so daß eine komplette Kon- trolle des Flusses nur im engen Zusammenspiel mit den „Eigenaktivitäten“ von Access möglich ist.

Programmflußkontrolle bedeutet in diesem Zusammenhang, daß Sie „alles in der Hand haben“, also über jede Benutzeraktion wachen, so daß der Benutzer nicht in irgend- welche falschen Systemzustände gelangen kann, die ihn nichts angehen. Im Regelfall muß z.B. mit allen Mitteln verhindert werden, daß ein Benutzer im Entwurfsmodus eines Formulars landet. Dann bräuchte er nämlich einen Access-Kurs, um dort wieder herauszukommen und es wäre ein sehr großer Zufall, wenn er auf dem Weg nichts zer- stören würde. Genauso sollten dem Benutzer keine Befehle im Weg stehen, die er nicht ausführen kann oder soll; auch das Datenbankfenster darf den durchschnittlichen Benutzer einer Datenbankanwendung nicht interessieren (müssen).

Vollständige Sicherheit Ihrer Datenbankanwendung ist ebensowenig möglich wie bei einem Aktenschrank, denn man mit der Brechstange auch aufwuchten kann. Sie kön- nen hier aber lernen, wie Sie durchschnittlichen Access-Benutzern die Zugriffsmög- lichkeiten wenigstens so stark einschränken, daß sie nicht aus Versehen alles zerstören. Größtmögliche Sicherheit erhalten Sie erst, wenn Sie die Benutzerverwaltung von Ac- cess voll ausnutzen (siehe dazu Abschnitt 7, „Benutzerverwaltung“ auf Seite 60); das ist aber nicht mehr Teil der Programmflußkontrolle.

6.1. Starten der Anwendung

Die Programmflußkontrolle beginnt bereits mit dem Starten von Access selbst. Wenn Ihre Benutzer wirklich unbedarft sind, sollten Sie Ihnen im Programm-Manager ein Icon zur Verfügung stellen, das Access Sofort mit Ihrer Datenbankanwendung startet, so daß der Benutzer nicht erst ratlos vor dem leeren Access-Bildschirm steht (in ganz hartnäckigen Fällen können Sie sogar das normale Access-Icon löschen).

Abbildung 22: Installation der Anwendung als eigenes Icon

Abbildung 22: Installation der Anwendung als eigenes Icon

40

Access 2.0 für Fortgeschrittene

Dazu erstellen Sie im Programm-Manager ein neues Programm-Icon in einer Gruppe (z.B. in Anwendungen) mit dem Befehl „Datei/Neu“. Als „Beschreibung“ tragen Sie den Namen Ihrer Anwendung ein, und als „Befehlszeile“ zuerst den kompletten Pfad- namen zu Access (in der Universitätsverwaltung hoffentlich überall „c:\prog\ac- cess.20\msaccess.exe“), dann ein Leerzeichen und dann den Namen Ihrer Datenbank (Sie können der Einfachheit halber auch das bisherige Programm-Icon kopieren und in das Feld „Befehlszeile“ nur den Namen der Datenbank hinten anfügen sowie die „Beschreibung“ ändern). Das Arbeitsverzeichnis muß das Verzeichnis sein, in dem Ihre Datenbank liegt. Wenn Sie möchten, können Sie sogar eine Kurzstart- Tastenkombination vergeben, die das Programm automatisch startet.

Wenn Sie nicht das Standard-Access-Icon (mit dem Schlüssel und der Tabelle) ver- wenden möchten, können Sie mit der Schaltfläche „Anderes Symbol“ ein anderes auswählen. Wenn Sie mit „OK“ bestätigen, ist ein neues Icon entstanden, das automa- tisch Ihre Anwendung in Access lädt.

Falls Sie auch noch ein anderes Startbild und eine andere Titelzeile des Programmfen- sters haben möchten, schauen Sie am besten unten in Abschnitt 8.1, „Eigenes „Outfit“ für die Anwendung“ auf Seite 65 nach.

6.2. Das Makro „AutoExec“

So haben Sie die Benutzer schon einmal sicher in Ihre Anwendung geleitet. Doch noch wird einfach nur das Datenbankfenster geöffnet, und nichts weiter passiert. Hier setzt jetzt die echte Flußkontrolle ein: Sie können ein Makro schreiben, das automatisch ausgeführt wird, wenn die Datenbank geöffnet wird. Dieses Makro sollte das Da- tenbankfenster ausblenden (nicht schließen!), damit die Benutzer damit nicht konfron- tiert werden, und statt dessen ein komfortables Hauptmenüfenster öffnen, das Sie selbst als Formular designen können. Der Name dieses Makros ist fest vorgegeben und lautet „AutoExec“. Wann immer Sie also ein Makro unter diesem Namen speichern, wird es sofort beim Laden der Anwendung ausgeführt. Seien Sie daher vorsichtig mit diesem Makro, weil es schwer zu umgehen ist! Ein Fehler dort kann sehr viel Ärger verursachen.

Für den Anfang genügen dort zwei Aktionen:

1. AusführenMenübefehl (Leiste Datenbank, Menü Fenster, Befehl Ausblen- den), um das aktuelle Fenster (das Datenbankfenster) auszublenden, und

2. ÖffnenFormular (Formularname: Hauptmenü), um das noch zu designende Hauptmenü-Formular zu öffnen.

Hier können Sie natürlich noch ganz andere Sachen machen, z.B. eine Liste aller zu mahnenden Bücher mit ÖffnenAbfrage (Mahnungen) darstellen oder bereits die ferti- gen Mahnungen ausdrucken mit ÖffnenBericht (Berichtsname Mahnungen, Ansicht Druck) und mit einer Aktualisierungsabfrage die Ausleihvorgänge als gemahnt markie- ren.

6. Programmflußkontrolle

41

Natürlich können Sie auch hier Bedingungen verwenden. Falls Sie z.B. mit verschie- denen Benutzerkennungen die Sicherheit Ihrer Datenbank kontrollieren, können Sie z.B. das Ausblenden des Datenbankfensters beim Administrator vermeiden, indem Sie vor diese Aktion die Bedingung Nicht Benutzer()="Admin" setzen, oder Sie können verschiedenen Benutzern auf die gleiche Art und Weise je nach Aufgabenge- biet verschiedene Hauptmenüformulare öffnen.

Geheimtip: Wenn Sie das Makro „AutoExec“ umgehen möchten, müssen Sie Access ohne Ihre Anwendung starten, dann den Befehl

„Datei/Datenbank öffnen“ ausführen, Ihre Datenbank auswählen, und beim Klick auf die Schaltfläche „OK“ die linke Shift-Taste ge-

drückt halten

In Access 7.0 ist für diesen Zweck der sog. Start-Assistent hinzugekommen, der die- se und andere übliche Start-Aktionen (Einblenden eines Infomationsfensters u.ä.) auf sehr einfache Weise ohne die Erstellung eines AutoExec-Makros ermöglicht.

Psssssst.

6.3. Ereignisse

Jetzt haben Sie also bereits etwas sichereren Boden unter den Füßen, weil jetzt nur noch ein Formular von Ihnen geöffnet ist, in dem Sie bestimmen, was getan wird. Nun wird es Zeit, die ominösen „Ereignisse“, von denen schon so oft die Rede war, genauer zu betrachten:

Es wurde bereits darauf hingewiesen, daß die meisten Benutzeraktionen sich in sog. „Ereignissen“ niederschlagen bzw. „Ereignisse“ auslösen. Für Formulare, Berichte und Steuerelemente gibt es ganze Berge von verschiedenen Ereignissen, die eintreten, wenn der Benutzer bestimmte Dinge getan hat. Jedes Ereignis ist genau einem For- mular, Bericht oder Steuerelement zugeordnet und tritt nur in diesem ein; wenn al- so in einem Steuerelement in einem Formular ein Mausklick ausgeführt wird, wird das Ereignis „Beim Klicken“ nur in diesem Steuerelement ausgelöst, nicht etwa in dem Formular, in dem ja eigentlich auch geklickt wurde.

Auf ein Ereignis können Sie reagieren, indem Sie in die entsprechende Ereigniseigen- schaft des Steuerelementes, Formulars oder Berichts eintragen, was Access tun soll, wenn dieses Ereignis eintritt. Dazu gibt es drei Möglichkeiten, von denen in diesem Kurs zwei besprochen werden:

1. Ein Makro aufrufen. Das ist die übersichtlichste Möglichkeit, um auf ein Ereignis zu reagieren: Dazu tragen Sie einfach in die entsprechende Ereig- niseigenschaft den Namen des Makros ein, das aufgerufen werden soll. Das Makro wird dann ausgeführt, wenn das Ereignis eintritt.

2. Ereignisprozeduren: Wenn Sie z.B. mit dem Steuerelementassistenten eine Befehlsschaltfläche einfügen, die ein Formular mit einem bestimmten Datensatz öffnet, erstellt der Assistent dafür leider kein Makro mit der Aktion „ÖffnenFormular“ (was Sie natürlich von Hand am einfachsten tun würden), sondern er schreibt eine Funktion in Access BASIC, die dasselbe tut. Diese Funktion wird direkt dem Steuerelement in diesem Formular zu- geordnet (Code behind Form) und ist anderweitig nicht verfügbar.

In diesem Kurs kann zwar nicht auch noch eine Einführung in die Pro- grammierung von Access BASIC gegeben werden, aber den Code, den die

42

Access 2.0 für Fortgeschrittene

Steuerelementassistenten erstellen, sollten Sie zu verstehen lernen, damit Sie evtl. auch einmal selbst kleine Änderungen darin vornehmen können. Außerdem sind Makros ab und zu Grenzen gesetzt, die Sie noch kennen- lernen werden; dann unumgänglich, auf primitive Ereignisprozeduren zu- rückzugreifen.

3. Access BASIC Funktionsaufrufe: Sie können auch selbst Access-Basic- Funktionen erstellen, die Sie dann von Ereignissen aus aufrufen lassen können. Diese Funktionen haben den Vorteil, daß sie (im Gegensatz zu Ereignisprozeduren) universell in verschiedenen Formularen und Steuere- lementen einsetzbar sind. Außerdem sind sie schneller als Makros, und sie können ihnen Parameter übergeben. Das kann aber in diesem Kurs nicht mehr erklärt werden.

6.3.1. Die wichtigsten Ereignisse

Hier finden Sie nun eine Liste der wichtigsten Ereignisse für Formulare, Berichte und Steuerelemente, mit einer kurzen Beschreibung. Für alle anderen erfahren Sie genaue- res in der Online-Hilfe, indem Sie eine Ereigniseigenschaft im Eigenschaftenfenster auswählen und F1 drücken. Die Ereigniseigenschaften heißen übrigens immer gleich wie die Ereignisse, so daß es keine Verwechslungsprobleme gibt.

6.3.1.1. Formularereignisse

Die folgenden Ereignisse treten immer für das ganze Formular ein:

Tabelle 6: Die wichtigsten Formularereignisse

Ereignis

Beschreibung

Beim Anzeigen

Tritt ein, wenn der Benutzer zu einem anderen Datensatz wechselt, sowie, wenn das Formular geöffnet wird, also der erste Datensatz darin angezeigt wird. Falls Sie besondere Be- rechnungen durchführen, die nicht direkt auf der zugrundelie- genden Abfrage basieren (z.B. bei Domänenfunktionen), soll- ten Sie hier die Neuberechnung dieses berechneten Feldes ausführen.

Nach Eingabe

Tritt ein, wenn der Benutzer einen neuen Datensatz hinzu- gefügt hat und diesen gerade abspeichern will. Wenn Sie in anderen Tabellen verwandte Datensätze mit einer Anfügeab- frage anfügen lassen wollen, sollten Sie das hier tun.

Vor Aktualisierung

Tritt ein, wenn der Benutzer einen Datensatz verändert hat und diesen verlassen möchte, bevor dieser Datensatz gespei- chert wird. Wenn Sie Gültigkeitskontrollen durchführen möchten, die mehrere Felder eines Datensatzes umspannen, sollten Sie die hier in einer Makro-Bedingung testen und ge- gebenenfalls mit „AbbrechenEreignis“ das Speichern des Da-

6. Programmflußkontrolle

43

Ereignis

Beschreibung

 

tensatzes verhindern. In Reaktionen auf dieses Ereignis dürfen Sie keine Werte des Datensatzes ändern, weil er noch nicht gespeichert ist.

Nach Aktualisierung

Tritt ein, nachdem der Benutzer einen veränderten Daten- satz gespeichert hat, aber bevor er in einen neuen Datensatz wechselt. Hier dürfen Sie wieder Werte im Datensatz ändern und können dann erneut speichern, um z.B. bestimmte Kor- rekturen automatisch vornehmen zu lassen.

Beim Löschen

Tritt ein, wenn der Benutzer einen Datensatz löschen möchte, bevor er tatsächlich gelöscht wird. Mit „AbbrechenEreignis“ können Sie den Löschvorgang verhindern, z.B. nach einer ei- genen Sicherheitsabfrage (vgl. Abschnitt 5.4, Bedingungen in Makros, auf Seite 42)

Vor Löschbestätigung

Tritt ein, bevor die Meldung „Sie haben gerade x Daten- “

erscheint. Mit einer besonderen Ereig-

nisprozedur kann diese Meldung unterdrückt werden, wenn Sie eine eigene Sicherheitsabfrage durchführen möchten (siehe

sätze gelöscht

dazu den Abschnitt 6.3.3, „Ereignisprozeduren“ auf Seite 52).

Übrigens sollten Sie das immer tun, wenn Sie beim Löschen bestimmte Dinge aktualisieren möchten, weil Sie leider kein Ereignis bekommen, wenn der Benutzer das Löschen rück- gängig macht und der Datensatz wiederhergestellt wird.

Beim Öffnen

Tritt ein, wenn das Formular geöffnet wird. Falls Sie beson- dere berechnete Felder verwenden, können Sie sie hier beim Öffnen eines Formulars aktualisieren lassen.

Beim Schließen

Tritt ein, wenn der Benutzer das Formular schließt. Sie kön- nen damit z.B. automatisch das Hauptmenü-Formular wieder öffnen lassen, oder beim Schließen des Hauptmenüformulars nach einer Sicherheitsabfrage Access selbst beenden.

Bei Fehler

Tritt ein, wenn in Access ein Datenbankfehler auftritt, wenn z.B. Regeln der referentiellen Integrität verletzt wurden etc. Auf dieses Ereignis sollten Sie nur mit einer Ereignisproze- dur reagieren, weil diese automatisch den Fehlercode überge- ben bekommt, aus dem Sie sehen können, welcher Fehler auf- getreten ist, und so dem Benutzer eine verständlichere Feh- lermeldung präsentieren können. Außerdem können Sie mit einem kleinen Kniff wie bei „Vor Löschbestätigung“ die Feh- lermeldung unterdrücken.

44

Access 2.0 für Fortgeschrittene

6.3.1.2. Berichtsereignisse

Das war ein Überblick über die wichtigsten Formularereignisse. Die Berichtsereignisse werden hier nicht extra aufgeführt, weil sie alle bereits bei den Formularereignissen erwähnt wurden.

Das einzige interessante Ereignis in Berichten findet sich in den Eigenschaften der Be- richts-Bereiche: Beim Formatieren. Es wird ausgelöst, wenn ein Berichtsbereich zu- sammengestellt wird, sei es für den Ausdruck oder für die Bildschirmdarstellung. Das ist die letzte Gelegenheit, bestimmte Felder anhand bestimmter Bedingungen ein- oder auszublenden (indem per Makro mit der SetzenWert-Aktion die Eigenschaft Steuere- lementname.Sichtbar auf Ja oder Nein gesetzt wird).

6.3.1.3. Steuerelementereignisse

Die folgenden Ereignisse treten in einzelnen Steuerelementen ein, betreffen also ledig- lich die Vorgänge in diesem Steuerelement und nicht im ganzen Formular (in Berichten werden Steuerelementereignisse fast nie benötigt).

Tabelle 7: Die wichtigsten Steuerelementereignisse

Ereignis

Beschreibung

Vor Aktualisierung, Nach Aktualisierung

Entsprechen den gleichen Ereignissen im Formular, aller- dings treten sie bereits dann ein, wenn der Wert des einzel- nen Steuerelements geändert wird und der Benutzer das Feld verläßt, nicht erst dann, wenn der Benutzer den geän- derten Datensatz verläßt.

Bei Änderung

Dieses Ereignis tritt mit jedem Tastendruck erneut ein, den der Benutzer in einem Steuerelement macht. Prädikat: Prak- tisch wohl unbrauchbar.

Beim Klicken

Tritt ein, wenn auf dieses Steuerelement ein Mausklick aus- geführt wird. Dieses Ereignis ist vor allem bei Befehls- schaltflächen relevant, weil damit der entsprechende Befehl ausgeführt werden soll.

Beim Doppelklicken

Tritt bei einem Doppelklick auf ein Steuerelement ein. Verwenden Sie dieses Ereignis am besten bei Listenfeldern, weil dort nach dem Windows-Standard ein Doppelklick das gleiche bedeutet wie 1 Klick + Betätigung der Standard- Schaltfläche des Formulars (z.B. „OK“).

Bei Nicht In Liste

Sehr interessantes Ereignis, das nur für Kombinationsfel- der existiert. Es tritt ein, wenn der Benutzer in das Kombi- nationsfeld einen Wert eingetragen hat, der nicht in der Liste des Kombinationsfeldes steht.

Wenn Sie auf dieses Ereignis reagieren (was Sie mit einer Ereignisprozedur tun sollten, weil Access dort den Text, den

6. Programmflußkontrolle

45

Ereignis

Beschreibung

 

der Benutzer einträgt, übergibt, und Sie die Fehlermeldung unterdrücken können), können Sie beispielsweise den vom Benutzer neu eingegebenen Wert mit in die Liste aufnehmen etc. Näheres dazu in der Online-Hilfe.

Mit diesen wenigen Ereignissen kommen Sie eigentlich schon überall hin, wo Sie wol- len. Die anderen sind wirklich nur für wenige Spezialfälle vorhanden; mir sind sie zum größten Teil noch nie in der Praxis unter die Augen gekommen.

6.3.2. Ereignisse und Makros

Wie bereits oben gesagt, können Sie durch ein Ereignis ein Makro aufrufen lassen, in- dem Sie einfach den Makronamen in die Ereigniseigenschaft des gewünschten Steuerelements eintragen. Falls Sie das Makro im nachhinein verändern möchten, klik- ken Sie einfach auf die Schaltfläche mit den drei Punkten neben der Ereigniseigen- schaft im Eigenschaftenfenster, wenn das Makro dort bereits eingetragen ist. Falls Ihr Makro Teil einer Makrogruppe ist, wird dann nur die Makrogruppe geöffnet, und Sie müssen selbst zu Ihrem Makro scrollen.

Für das Beispielmakro aus Abbildung 21 tragen Sie einfach in die Eigenschaft „Vor Aktualisierung“ des Steuerelementes „Signatur“ im Formular „Ausleihen_U“ den Ma- kronamen „Ausleihen. CheckBuch“ ein (vorausgesetzt, Sie haben die Makrogruppe unter dem Namen „Ausleihen“ gespeichert) und in die Eigenschaft „Beim Löschen“ des Formulars „Ausleihen_U“ das Makro „Ausleihen.Löschen“. Die Namensähnlich- keit ist nicht zwingend, sie erleichtert aber die spätere Orientierung in Ihrer Anwen- dung ungemein.

Wenn Sie die Makros jetzt testen, sehen Sie, daß Sie kein Buch mehr ausleihen kön- nen, das bereits verliehen ist, und daß ein ausgeliehenes Buch automatisch als „Ausge- liehen“ vermerkt wird. Außerdem bekommen Sie eine Warnmeldung, wenn Sie einen Ausleihvorgang löschen möchten.

Wenn es Sinn macht, können Sie ein Makro natürlich bei verschiedenen Steuerele- menten in verschiedenen Formularen aufrufen lassen. Dafür empfiehlt es sich manch- mal, eine Makrogruppe „Allgemein“ anzulegen, die alle Makros enthält, die von ver- schiedenen Formularen aufgerufen wird (z.B. ein Makro zum Schließen eines Formu- lars mit anschließendem Öffnen des Hauptmenüformulars).

6.3.3. Ereignisprozeduren

Ich hatte Sie bereits gewarnt, daß Sie sich ein bißchen noch in Ereignisprozeduren ein- arbeiten müssen, weil bestimmte Dinge damit erst möglich werden. Access BASIC ist ein „ganz normaler“ BASIC-Dialekt, und alle, die einmal BASIC irgendwo gelernt ha- ben, werden sich schnell zurechtfinden. Andere müssen sich erst einmal ein bißchen in Programmierung allgemein eindenken.

46

Access 2.0 für Fortgeschrittene

Eine Ereignisprozedur ist, wie schon gesagt, eine BASIC-Prozedur (also eine geord- nete Ansammlung von BASIC-Funktionsaufrufen), die direkt mit dem Formular und dem entsprechenden Ereignis verbunden ist. Sie können diese Prozedur nicht von ei- nem anderen Formular aus aufrufen, sondern sie nur kopieren, was bei späteren Ände- rungen sehr lästig ist, weil Sie die ja dann wieder kopieren müssen.

Aber der große Vorteil (neben der erhöhten Geschwindigkeit) gegenüber Makros ist, daß Sie in bestimmten Ereignisprozeduren Parameter übergeben bekommen, die Sie selbst auslesen oder auch verändern können, z.B. um eine folgende Fehlermeldung zu unterdrücken.

Das beste Beispiel dafür ist die Ereignisprozedur für das Ereignis „Vor Löschbestäti- gung“. Die können Sie sehen, wenn Sie (bei bisher leerer Eigenschaft) im Eigenschaf- tenfenster zum Formular „Ausleihen_U“ die Schaltfläche mit den drei Punkten neben der Eigenschaft „Vor Löschbestätigung“ betätigen. In einer kleinen Auswahlbox kön- nen Sie dann festlegen, ob Sie in den Ausdrucks-Editor (um eigene BASIC-Funktio- nen aufzurufen), in den Makro-Editor (um ein Makro für dieses Ereignis zu erstellen) oder in den Code-Editor (für die entsprechende Ereignis-Eigenschaft) möchten. Wäh- len Sie also den Code-Editor aus.

Sie sehen vor sich folgenden Text:

Sub Form_BeforeDelConfirm (Cancel As Integer, Response As Integer)

End Sub Sie sind nun schon mitten in Access-BASIC gelandet. Die erste Zeile bedeutet, daß Sie eine neue Sub-Prozedur (ein Unterprogramm) erzeugt haben, die den klangvollen Na- men „Form_BeforeDelConfirm“ trägt. Dieser Name wird von Access automatisch ver- geben, und zwar steht vor dem Unterstrich (_) der Name des Steuerelements im For- mular, dem diese Prozedur zugeordnet ist (hier das Formular selbst, also „Form“), und danach der englische Name für das Ereignis, dessen Prozedur Sie gerade bearbeiten (Vor Löschbestätigung = BeforeDelConfirm). Die wundersamen Worte in Klammern sagen Ihnen, daß die Ereignisprozedur zwei Parameter übergeben bekommt (mit de- nen Sie dann rechnen können), einen mit dem Namen „Cancel“ (vom Datentyp „Integer“, also Ganzzahl), und einen mit dem Namen „Response“ (vom gleichen Da- tentyp). Mit der Zeile „End Sub“ ist das Unterprogramm schon zu Ende, es passiert al- so im Moment noch gar nichts.

Aus der Online-Hilfe zu dieser Ereignisprozedur erfährt man, daß man beide Para- meter selbst verändern kann, und Access sich dementsprechend verhält: Wenn Sie die Variable „Cancel“ auf „True“ (wahr, bzw. „Ja“) setzen, bewirkt dies das gleiche, wie wenn der Benutzer auf die Löschbestätigung mit „Abbrechen“ geantwortet hätte; der Löschvorgang wird also abgebrochen. Falls Sie „Cancel“ in Ruhe lassen (es ist ur- sprünglich auf „False“=falsch bzw. „Nein“), können Sie mit der Variablen „Response“ entweder so tun, als hätte der Benutzer „OK“ geklickt (indem Sie sie auf DA- TA_ERRCONTINUE setzen; keiner muß verstehen, warum das gerade so heißt), oder

6. Programmflußkontrolle

47

alles sein lassen und die Warnmeldung anzeigen, als wäre nichts gewesen (indem Sie sie auf DATA_ERRDISPLAY setzen).

Im Beispiel möchten Sie ja gerade, daß das Löschen normal durchgeführt wird, ohne daß noch einmal nachgefragt wird (die Sicherheitsabfrage haben Sie ja schon im Ma- kro beim Ereignis „Beim Löschen“ erledigt): Wenn der Benutzer bereits in der Sicher- heitsabfrage im Makro den Datensatz löschen wollte, muß er nicht noch einmal gefragt werden. Also setzen Sie Response auf DATA_ERRCONTINUE und lassen Cancel unverändert, so daß Ihre Ereignisprozedur so aussieht:

Sub Form_BeforeDelConfirm (Cancel As Integer, Response As Integer) Response = DATA_ERRCONTINUE End Sub Das war’s auch schon, was ich zu Ereignisprozeduren zu sagen hatte (der Rest ist für Spezialisten in der Online-Hilfe zu den entsprechenden Ereignissen erklärt).

Wenn Sie aus diesem kryptischen Chaos entfliehen möchten, gelingt Ihnen das, indem Sie das Codefenster einfach schließen.

6.4. Benutzerdefinierte Menüleisten

Allerdings ist Ihre Anwendung damit noch längst nicht gegen hartnäckige Benutzer abgesichert. Sie können sich nämlich sicher vorstellen, daß Ihre Makros umsonst sind, wenn der Benutzer die Möglichkeit hat und vielleicht auch wahrnimmt, die Daten in der Tabelle und nicht im Formular zu ändern; dann werden ja die Ereignisse nicht aktiviert, so daß die Makros auch nicht aufgerufen werden.

Sie müssen also den Benutzer von allen unerwünschten Befehlen fernhalten. Dazu müssen Sie zuerst eine eigene Menüleiste definieren, so daß die Standard-Access- Menüleiste mit ihren unendlich vielen Möglichkeiten, etwas kaputt zu machen, nicht angezeigt wird.

Dazu stellt Access einen praktischen Assistenten zur Verfügung, der allerdings nicht ganz perfekt ist, so daß ein bißchen Nachbearbeitung nötig sein wird. Aber wenn Sie wissen, daß in Access benutzerdefinierte Menüleisten auch nichts anderes sind als Makros mit der besonderen Aktion „HinzufügenMenü“, dann werden Sie vor ei- ner Nachbearbeitung keine Angst mehr haben.

Starten Sie also zuerst den Assistenten, um eine Menüleiste für das Hauptmenü- Formular zu erhalten. Dazu muß das Hauptmenü-Formular in der Entwurfsansicht ge- öffnet sein. Gehen Sie dann zur Eigenschaft „Menüleiste“ und klicken Sie auf die Schaltfläche mit den drei Punkten. Der Menü-Editor (siehe Abbildung 23) wird ge- startet und fragt Sie zuerst nach einer Vorlage für Ihre neue Menüleiste. Sie können nämlich praktischerweise alle Standard-Access-Menüleisten sich vornehmen und Stück für Stück verändern, also alle unerwünschten Befehle entfernen und ein paar eigene einfügen.

Für Ihre Hauptmenüleiste lohnt sich das aber nicht, Sie fangen lieber ganz neu damit an, wählen also „Leere Menüleiste“ und fahren fort. Sie finden sich im Menü-Editor

48

Access 2.0 für Fortgeschrittene

Abbildung 23: Der Menü-Editor

Abbildung 23: Der Menü-Editor

wieder, der fast aussieht wie in Abbildung 23, nur daß noch keine Menübefehle einge- tragen sind.

In den oberen vier Feldern des Menü-Editors können Sie jeweils die Details des Me- nübefehls sehen, der gerade ausgewählt ist. Die vielen &-Zeichen sollten Sie noch aus dem Abschnitt 4.3.4, Bezeichnungsfelder, auf Seite 27 kennen; sie dienen auch hier dazu, den Menüpunkt mit der Tastenkombination Alt+<unterstrichener Buchstabe> er- reichbar zu machen.

Die Menüpunkte am linken Rand des unteren Fensters sind die Menünamen, die oben in der Menüzeile auftauchen werden: Datei, Stammdaten und Ausleihen. Einge- rückt (mit der Schaltfläche mit dem Pfeil nach rechts) sehen Sie unter jedem Menüna- men die Liste der Befehle, die in diesem Menü verfügbar sind, wobei der besondere Befehl „-“ bedeutet, daß Access zwischen „Information“ und „Beenden“ eine Trenn- linie einfügt, wie Sie sie aus allen Windows-Standard-Anwendungen kennen.

Bitte halten Sie sich auch hier an den Windows-Standard, der vorgibt, daß der erste Menüpunkt der Menüleiste „Datei“ heißt, und ein Feld „Beenden“ enthält, mit dem Sie die Anwendung verlassen oder wenigstens das aktuelle Fenster schließen können.

Wenn Sie den ersten Menübefehl eintragen und in alter Gewohnheit in das Feld „Aktion“ z.B. „Meldung“ eintragen möchten, um eine Informationsmeldung über die Datenbankanwendung anzuzeigen, werden sie die Grenze bemerken, von der ich ge- sprochen habe: Sie können aus unerfindlichen Gründen im Menü-Editor nur die drei Aktionen „AusführenMenübefehl“, „AusführenCode“ (zum Ausführen eigener Ac- cess-BASIC-Funktionen) und „AusführenMakro“ verwenden. Das ist ziemlich lästig,

6. Programmflußkontrolle

49

weil Sie für jeden kleinen Menübefehl ein eigenes Makro schreiben müßten, das Sie dann per „AusführenMakro“-Aktion starten würden.

Meine bevorzugte Arbeitsweise ist es, mit dem Menü-Editor zunächst die Menü- struktur der Anwendung zu erstellen, wobei ich wie in Abbildung 23 das Argument von „AusführenMakro“ freilasse, dann den Menüeditor beende, wobei der Editor dann verschiedene Makrogruppen erzeugt (im obigen Beispiel wäre das „Hauptmenüleiste", „Hauptmenüleiste_Datei“, „Hauptmenüleiste_Stammdaten“ und „Hauptmenülei- ste_Ausleihen“), und dann die Aktionen in den entsprechenden Makrogruppen verän- dere: Der Name eines Makros innerhalb einer Makrogruppe steht für den Namen des Menübefehls, und darunter dürfen ohne weiteres auch mehrere Befehle am Stück ste- hen.

Im Beispiel habe ich die Makrogruppe „Hauptmenüleiste_Datei“ so verändert, daß im Makro „&Information“ statt der leeren AusführenMakro-Aktion die Aktion „Meldung“ stand, die eine Meldung über Autor und Zweck der Datenbankanwen- dung ausgibt, sowie unter dem Makronamen „&Beenden“ die Aktion „Beenden“, die Access verläßt. Außerdem habe ich in der Makrogruppe „Hauptmenüleiste_Stammda- ten“ in alle Makros statt der leeren AusführenMakro-Aktionen die passenden „Öff- nenFormular“-Aktionen eingetragen.

Dafür muß ich allerdings den Preis zahlen, daß ich die Menüstruktur dieser Menüleiste nicht mehr mit dem Menü-Editor nachbearbeiten kann, sondern das von Hand in den entsprechenden Makros erledigen muß.

Wenn Sie übrigens Untermenüs verwenden möchten, rücken Sie einen Menüpunkt einfach mit der Pfeil-nach-rechts-Schaltfläche noch eine Stufe tiefer ein.

Auf diese Art können Sie für alle anderen Formulare Menüleisten erstellen. Bei den Eingabeformularen nehmen Sie als Ausgangsmenüleiste am besten die Menüleiste „Formular“, damit Sie die Standard-Funktionen im Menü „Bearbeiten“, die Sie sicher gerne in Ihre Menüleiste übernehmen möchten, schon vorgefertigt vorliegen haben und nur noch gefährliche Befehle ausblenden. Besonders gefährlich sind:

aus dem Menü „Datei“ z.B. „Neues Objekt erstellen“, „Add-Ins“, „Makro ausführen“,

aus „Ansicht“ praktisch das ganze Menü, vor allem „Optionen“ und „Symbolleisten“, aber auch „Formularentwurf“ etc.,

aus „Datensätze“ die Filter-Befehle, wenn Sie Ihren Benutzern nicht zu- muten möchten, sich in einer Abfrage-Entwurfsansicht für das Filtern von Daten wiederzufinden, und

und aus „Fenster“ vor allem „Einblenden“, sonst blendet ein Benutzer ganz keck das Datenbankfenster, das Sie in AutoExec ausgeblendet haben, wieder ein.

Außerdem sollten Sie, wenn Sie nicht eine eigene Online-Hilfe zur Verfügung stellen, das ?-Menü entsprechend anpassen.

50

Access 2.0 für Fortgeschrittene

Das war aber eigentlich schon alles, was Sie zur Erstellung eigener Menüleisten wissen müssen.

Halt! Eines noch für die Perfektionisten unter Ihnen: Der Benutzer kann noch durch die Kontextmenüs verwirrt werden, die bei Druck auf die rechte Maustaste erscheinen. Um das zu vermeiden, muß in allen Formularen die Eigenschaft „Kontextmenü“ auf „Nein“ gestellt werden, damit diese Menüs nicht mehr angezeigt werden.

6.5. Arbeiten mit Symbolleisten

Aber noch ist es für den Benutzer ein leichtes, sich Ihrem sicheren Griff zu entziehen:

Ein Klick auf das Entwurfssymbol der Symbolleiste, und er ist da, wo er nicht hin soll, oder gar ein Klick auf das Symbol für das Datenbankfenster, und es taucht aus seiner Versenkung wieder auf.

6.5.1. Standardsymbolleisten verstecken

Einzige Abhilfe: Sie müssen die System-Symbolleisten abschalten. Das geht mit dem Menübefehl „Ansicht/Optionen“: Ein kleines Fenster erscheint, das die verschiede- nen Kategorien von Programmoptionen von Access verwaltet. In der Kategorie „Allgemein“ finden Sie die Option „Eingebaute Symbolleisten verfügbar“, die Sie ganz schnell auf „Nein“ stellen (wenn Sie sicher sind, daß auch Sie ohne diese Sym- bolleisten auskommen).

Bei der Gelegenheit können Sie dem Benutzer auch gleich verbieten, Symbolleisten anzupassen (das soll alleine Ihre Aufgabe bleiben), indem Sie die Option „Symbollei- sten anpassen“ auf „Nein“ setzen. Doch Vorsicht damit in einer Mehrbenutzerumge- bung: Diese Einstellungen sind für jeden Benutzer verschieden! Wenn Sie absolut si- chergehen möchten, müssen Sie im AutoExec-Makro (vgl. Abschnitt 6.2 auf Seite 46) diese Option immer ausschalten. Das geht mit zwei aufeinanderfolgenden Aktio- nen:

Zuerst „Tastaturbefehle“ mit dem Argument „{down 3}n{down 8}n~“ (Warten auf „Nein“ lassen): Das bewirkt, daß an das nächste zu öffnende Fenster die Tastenkombi- nation 3 Pfeil nach unten, „n“ (für Nein), dann 8 mal nach unten, wieder nein, und schließlich Return gesendet wird. Dieses Fenster öffnen Sie sofort im Anschluß an die- se Aktion mit der Aktion „AusführenMenübefehl“ mit den Parametern Datenbank; Ansicht; Optionen.

So kann der Benutzer keine Änderungen mehr vornehmen, solange Sie Ihre Menüzei- len so angelegt haben, daß der Befehl „Ansicht/Optionen“ nirgends mehr aufgerufen werden kann (das müssen Sie für jedes Formular und für jeden Bericht einzeln ma- chen).

6.5.2. Benutzerdefinierte Symbolleisten

Jetzt können Sie daran gehen, selbst Symbolleisten für Ihre Anwendung zu entwickeln. Dazu müssen Sie zuerst dafür sorgen, daß bei „Ansicht/Optionen“ die Option

6. Programmflußkontrolle

51

„Symbolleisten anpassen“ auf „Ja“ gesetzt ist, sonst dürfen sie keine Symbolleiste ver- ändern. Dann wählen Sie den Menübefehl „Ansicht/Symbolleisten“, und blenden erst einmal alle Symbolleisten, die Sie nicht interessieren, aus.

Klicken Sie dann auf die Schaltfläche „Neu“, um eine neue Symbolleiste zu erstellen. Vergeben Sie der Leiste einen Namen, mit dem Sie später noch etwas anfangen kön- nen, und dann sehen Sie, daß Access eine neue, kleine, leere Symbolleiste in der Fen- steransicht darstellt. Wählen Sie nun die Schaltfläche „Anpassen“, und Sie erhalten eine Dialogbox, in der Sie auf der linken Seite verschiedene Kategorien von Befehlen sehen, und rechts die dazugehörigen Symbole. Ziehen Sie alle Symbole, die Sie in Ihrer Symbolleiste sehen möchten, mit der Maus in ihre kleine neue Symbolleiste. Sie kön- nen auch Zwischenräume zwischen Symbole einfügen, indem Sie ein Symbol der Leiste ein oder zwei Millimeter nach rechts ziehen (nicht so weit, daß es über den Rand der Symbolleiste fällt; dann würde Access damit eine neue Symbolleiste anfan- gen!).

Wichtig sind hier die Kategorien „Alle Makros“ und „Alle Formulare“: Damit kön- nen Sie Symbole für Ihre selbsterstellten Formulare und Makros erzeugen, damit die Befehle immer „zur Hand“ sind. Dabei wird Ihnen allerdings auffallen, daß alle For- mulare das Formular-Symbol von Access bekommen, so daß Sie die einzelnen Sym- bole nicht voneinander unterscheiden können. Die Abhilfe ist einfach: Klicken Sie (während Sie noch im Anpassen-Modus sind) mit der rechten Maustaste auf ein sol- ches Symbol und wählen Sie den Befehl „Schaltfläche aussuchen“ aus dem Kon- textmenü. Dann erhalten Sie eine Auswahl von allen möglichen Bildern, die Sie ver- wenden können (die beeinflussen dann nur noch die Optik, nicht mehr das Verhalten Ihres Symbols). Außerdem können Sie angeben, daß das Symbol statt eines Bildes Text enthalten soll, so daß Sie beispielsweise den Formularnamen in das Symbol ein- tragen können.

Wenn Sie so Ihre Wunsch-Symbolleiste zusammengestellt haben, verlassen Sie den Anpassen-Modus durch Klick auf die OK-Schaltfläche, und denken Sie daran, mit An- sicht/Optionen den Benutzern das Verändern Ihrer Symbolleisten zu verbieten!

6.6. Ändern der Tastaturbelegungen

Soweit haben Sie Ihre Anwendung also schon von allen durchschnittlichen Benutzern gesichert. Für einen Access-Kenner gibt es aber noch eine Möglichkeit: Durch Druck auf die Taste F11 kann er jederzeit das Datenbankfenster hervorzaubern, egal, ob es ausgeblendet oder nur hinter anderen Fenstern verborgen hat. Und wie leicht kommt ein anderer Benutzer einmal mit der Kaffeetasse auf diese Taste!

Also hilft nur eines: Tasten abfangen! Auch das geht wieder sehr einfach: Dafür gibt es eine Makrogruppe mit einem festen, vordefinierten Namen: „Tastaturbelegung“ (Diesen Namen können Sie mit „Ansicht/Optionen“ in der Kategorie „Tastatur“ zwar ändern, es empfiehlt sich aber nicht). In dieser Makrogruppe können Sie als Makro- namen die Bezeichnung der Taste eintragen, die Sie abfangen möchten, wobei Sie

52

Access 2.0 für Fortgeschrittene

die gleichen Sondercodes wie bei der Aktion „Tastaturbefehle“ verwenden können (näheres in der Online-Hilfe).

Für Ihren Fall heißt das also: Makroname ist {F11}, und als Aktion können Sie ent-

weder gar nichts oder eine ironische Meldung („Na, na, ähnliches) eintragen.

Auf diese Art können Sie auch eigene Tastenkürzel definieren, um Arbeitsabläufe zu beschleunigen. Diese Tastenkürzel gelten dann allerdings für die gesamte Anwen- dung. Z.B. könnten Sie F11 umdefinieren, so daß es immer das gerade aktive Formu- lar schließt (wenn es nicht schon das Hauptmenü ist) und zum Hauptmenü zurück- kehrt.

Das ist für Sie natürlich eine einfache Übung:

wer wird denn gleich“ oder

Name

Bedingung

Aktion

{F11}

Nicht Bildschirm.AktivesFormular.Name=„Hauptmenü“

Schließen

   

ÖffnenFormular

(Hauptmenü)

Ebenso können Sie auch allein dem Administrator erlauben, das Datenbankfenster mit F11 zu öffnen, indem Sie für ihn eine Aktion eintragen, die im Datenbankfenster irgendein Objekt auswählt (und so das Datenbankfenster mit einblendet), und den an- deren Benutzern eine freche Meldung anzeigen (das funktioniert natürlich nur, wenn Sie die Access-Benutzerverwaltung aktiviert haben):

Name

Bedingung

Aktion

{F11}

Benutzer()=„Admin“

AuswählenObjekt (Typ: Formular; kein Objektname; Im Datenbankfenster: Ja)

   

StopMakro (Damit der Rest nur für Nicht-Admins kommt)

   

Meldung („Na, na

Wer wird denn gleich!“)

Damit sollten Sie die Anwender von vorne bis hinten im Griff haben. Eine absolut si- chere Methode, wie Sie auch noch das Programmende kontrollieren können, finden Sie unten im Abschnitt 8.3, „Kontrolle über das Programmende“ auf Seite 67.

7. Benutzerverwaltung

53

7. Benutzerverwaltung

Access bietet Ihnen auch die Möglichkeit, Ihre Daten und vor allem die Formulare, Berichte etc. vor unberechtigtem Zugriff durch andere Benutzer zu schützen. Dazu können Sie für jeden Benutzer eigene Benutzerkennungen mit Paßwörtern und ei- genen Berechtigungen vergeben, so daß jeder Benutzer nur an einen ganz bestimmten Ausschnitt Ihrer Datenbankanwendung kommt.

Lassen Sie sich zu diesem Thema auch nicht die Online-Hilfe zum Thema „Sichern Ihrer Datenbank“ entgehen. Sie ist außergewöhnlich ausführlich und enthält noch mehr Informationen über die optimale Datensicherheit Ihrer Anwendung.

7.1. Grundprinzipien

In Access sieht das folgendermaßen aus: Es werden Benutzerkennungen vergeben. Jeder Benutzer ist einer oder mehreren Gruppen zugeteilt. Die effektiven Berechtigun- gen eines Benutzers sind die Summe seiner persönlich eingetragenen Benutzerrechte und der Berechtigungen, die für die Gruppen, deren Mitglied er ist, eingetragen sind. Für jedes Objekt (Tabellen, Abfragen, Formulare, Berichte, Makros, Module) können Sie einzeln bestimmen, welcher Benutzer (oder welche Benutzergruppe) welche Rechte haben soll. Es gibt die folgenden Rechte:

Öffnen/Ausführen: Bei Formularen, Berichten, Makros und der gesamten Datenbank.

Entwurf lesen: Bei allen Objekten. Gibt an, ob der Benutzer in die Ent- wurfsansicht wechseln darf.

Entwurf ändern: Bei allen Objekten. Diese Berechtigung sollten Sie in aller Regel für sich behalten, bzw. nur denjenigen Personen erlauben, die selbst die Datenbankanwendung mit programmieren.

Daten lesen: Die nötigste Berechtigung. Wer die nicht hat, kann nicht mit Ihrer Anwendung arbeiten.

Daten aktualisieren: Wer darf Daten einer Tabelle verändern?

Daten einfügen

Daten löschen

Verwalten: Diese Berechtigung erlaubt es, anderen Benutzern Rechte an bestimmten Objekten zuzuteilen und zu verändern. Dieses Recht sollte dem Administrator vorbehalten sein.

Wenn Sie jetzt also der Gruppe „Gäste“ das Recht eintragen, Daten der Tabelle „Bücher“ zu aktualisieren, dann darf jeder einzelne Benutzer, der Mitglied der Gruppe „Gäste“ ist, diese Daten aktualisieren, unabhängig davon, ob Sie ihm persönlich dieses Recht erteilt haben oder nicht. Er darf es schon allein deswegen, weil er Mitglied einer Gruppe ist, die dieses Recht hat.

54

Access 2.0 für Fortgeschrittene

Selbstverständlich können Sie ihm zusätzlich noch das Recht „Daten löschen“ zuteilen, das die Gruppe nicht hat, dann darf nur er das.

7.2. Vergabe von Benutzerkennungen

Das Abfragen von Benutzerkennung und Paßwort beim Starten von Access be- ginnt in dem Moment, in dem Sie für den besonderen Benutzer „Administrator“ (bzw. kurz „Admin“) ein Paßwort eintragen. Bis dahin wurde jeder Benutzer, ohne daß er davon wußte, immer als „Admin“ angemeldet, so daß er immer alle Rechte hatte.

Wenn Sie nun mit der Vergabe von Benutzerkennungen beginnen, sollten Sie sich zu- erst überlegen, ob es sinnvoll ist, Ihre Benutzer in verschiedene Gruppen einzuteilen, die jeweils verschiedene Ausgangs-Rechte haben; z.B. könnten Sie alle Benutzer, die eigentlich nur Lese-Rechte haben, in eine Gruppe „Nur Lesen“ zusammenfassen, so daß Sie lediglich einmalig die Gruppenrechte und dann nur noch davon positiv abwei- chende einzelne Benutzerrechte eintragen müssen.

Standardmäßig stellt Access bereits drei Gruppen zur Verfügung: Administratoren, Benutzer und Gäste. Die Gruppe „Administratoren“ hat alle Rechte. Das sollten Sie ruhig so lassen, und (der Praktikabilität halber) alle Personen, die die Datenbank- anwendung verwalten sollen, in diese Gruppe eintragen. Alternativ bietet es sich an, alle Verwaltungsaufgaben (also das Erstellen von Formularen etc.) nur unter dem Be- nutzernamen „Admin“ zu machen, damit Sie nicht aus Versehen eine Änderung vor- nehmen, die Ihnen später leid tut. So würden Sie sich nur für Verwaltungsaufgaben unter dem Namen „Admin“ anmelden, und für die „normale“ Anwendertätigkeit nach wie vor unter Ihrem Namen, wo Sie zwar nichts verändern, aber eben auch nichts irr- tümlich falsch machen können.

Damit sind Ihre Daten aber noch nicht vor unerlaubtem Lesen geschützt! Wenn Sie dies wollen, lesen Sie bitte im Abschnitt 7.3, „Bestmögliche Datensicherheit“ auf Seite 63 nach!

Die zweite Gruppe, „Gäste“, wird von Access standardmäßig vollkommen rechtlos gestellt. Das ist auch gut so. Benutzer, die lediglich dieser Gruppe angehören, haben überhaupt keine Gruppenrechte, sondern nur die ausgesuchten Rechte, die Sie ihnen persönlich zuweisen.

Die dritte Gruppe schließlich, „Benutzer“, bekommt von Access standardmäßig aus unerfindlichen Gründen alle Rechte bereits als Gruppenrechte, ist also der Gruppe „Administratoren“ gleichgestellt. In der Praxis empfiehlt es sich, dieser Gruppe die Standard-Benutzerrechte einzutragen, also das Leserecht für alle Objekte, falls Sie nicht bestimmte Tabellen (wie z.B. Patientendaten) gesondert schützen wollen. Wenn Sie dann die einzelnen Benutzer nur dieser Gruppe zuordnen, haben Sie schon einen gesunden Stamm an Rechten, den Sie dann für jeden Benutzer entsprechend erweitern können, also jedem in den Tabellen, die seinem Aufgabengebiet angehören, ein Aktua- lisierungs-, Einfüge- und Löschrecht einzuräumen.

7. Benutzerverwaltung

55

Falls Sie das so handhaben möchten, kommen Sie ohne die Erstellung einer eigenen Benutzergruppe aus. Falls nicht, könnten Sie eine neue Gruppe erstellen, indem Sie den Menübefehl „Zugriffsrechte/Gruppen“ auswählen und in der erscheinenden Dia- logbox die Schaltfläche „Neu“ betätigen.

Ansonsten sind Sie bereit dazu, neue Benutzerkonten einzurichten. Das geschieht mit dem Menübefehl „Zugriffsrechte/Benutzer“. Es erscheint die Dialogbox aus Abbildung 24. Um einen neuen Benutzer anzulegen, klicken Sie auf die Schaltfläche „Neu“. In der folgenden Dialogbox tragen Sie den Namen des Benutzers ein, unter dem er sich anmelden wird, Außerdem verlangt Access eine persönliche Identifikati- onskennung (PID), die den Benutzer intern spezifiziert. Diese PID kann 20 Zeichen lang sein und aus Buchstaben und Zahlen bestehen, wobei Groß- und Kleinschreibung unterschieden werden. Merken Sie sich Name und PID sehr gut; am besten schreiben Sie beides auf einen Zettel und verwahren diesen an einem sicheren Ort, weil Sie die PID exakt brauchen, um ein Benutzerkonto zu rekonstruieren, falls der Benutzer bei- spielsweise einmal sein Paßwort vergessen hat, oder falls der Benutzer in eine andere Access-Arbeitsgruppe übernommen werden soll.

Nach Bestätigung dieses Dialogfeldes landen Sie wieder in dem Fenster aus Abbildung 24; dort können Sie jetzt im unteren Teil festlegen, welchen Gruppen bzw. welcher Gruppe der neue Benutzer angehören soll (Noch einmal: Damit „erbt“ er zwingend alle Rechte, die für die Gruppe vergeben worden sind).

Mit der Schaltfläche „Löschen“ könnten Sie einen irrtümlich angelegten oder inzwi- schen überflüssig gewordenen Benutzereintrag wieder löschen.

Ansonsten wiederholt sich die Prozedur zum Eintragen neuer Benutzerkonten solange, bis Sie alle Mitarbeiter erfaßt haben.

7.3. Bestmögliche Datensicherheit

Diese Konten sind nun in Ihrer Datei „system.mda“ gespeichert. Nur besteht ein wich-

Abbildung 24: Benutzereintrag verändern

Abbildung 24: Benutzereintrag verändern

56

Access 2.0 für Fortgeschrittene

tiges Problem, wenn Sie Ihre Daten wirklich schützen möchten: Jeder beliebige Mensch mit Zugriff auf Ihren Rechner bzw. Ihr Netzwerk könnte die Datenbankdatei kopieren und bei sich zuhause installieren, wo er eine eigene system.mda-Datei be- sitzt, in der er das Paßwort für den Administrator besitzt.

Sie müssen also für wirkliche Sicherheit noch dafür sorgen, daß der Benutzer „Administrator“ keine Rechte hat, sondern daß statt dessen ein sog. Supervisor- Equivalent User geschaffen wird, der alle Rechte des Administrators hat (insbesondere muß er Eigentümer der Objekte sein, dazu mehr in der Online-Hilfe zum Thema „Eigentümerrechte verändern“), und der als Administrator fungiert, aber eben eine ei- gene PID hat, die niemand zuhause „nachbauen“ kann. Der Standard-Access- Administrator darf also keinen Zugang zu den geheimen Daten haben, sonst kann jeder, der in der Lage ist, die Datenbankdatei zu kopieren und bei sich zuhause Access zu installieren, die Daten lesen!!

Richten Sie also einen Benutzer ein (nennen Sie ihn ruhig „Verwalter“), der eine ganz besonders geheime PID bekommt. So sicher, wie Sie diese PID aufbewahren, sind Ihre Daten! Entziehen Sie dann dem Benutzer „Administrator“ alle Rechte in Ihrer Daten- bank.

Das gleiche gilt für die Access-Standard-Gruppen „Benutzer“, „Administratoren“ und „Gäste“; diese Gruppen dürfen für bestmögliche Sicherheit ebenfalls keine Rechte in Ihrer Datenbank haben. Ersetzen Sie also auch diese Gruppen mit dem oben beschriebenen Verfahren durch eigene mit eigener PID, die ebenfalls besonders geheim sein muß und entziehen Sie den Original-Gruppen alle Rechte an Ihren Objekten.

Dann hat nur noch jemand, der Zugang zu den PIDs Ihrer selbstdefinierten Benutzer und Gruppen hat, Zugriff auf Ihre Daten.

7.4. Vergabe von Rechten an Access-Objekten

Jetzt soll endlich gezeigt werden, wie Sie an einzelnen Objekten Rechte vergeben können. Hierzu müssen Sie den Menübefehl „Zugriffsrechte/Berechtigungen“ aus- wählen. Es erscheint die Dialogbox aus Abbildung 25. Dort sehen Sie links oben eine Liste aller verfügbaren Benutzer (bzw., wenn Sie das Optionsfeld „Gruppen“ aktivie- ren, eine Liste aller Gruppen), rechts oben die Liste aller Objekte des mit dem Kombi- nationsfeld „Objekttyp“ angegebenen Typs, sowie unten eine Liste aller verfügbaren Berechtigungen für das aktuell ausgewählte Objekt und den aktuell ausgewählten Be- nutzer bzw. die Gruppe.

7. Benutzerverwaltung

57

Sie sollten damit beginnen, die Gruppenrechte zu vergeben, indem Sie das Options- feld „Gruppen“ in der Mitte des Dialogfeldes auswählen. Dann können Sie in der Liste oben links die Gruppe auswählen, für die Sie Berechtigungen vergeben möchten, dann zuerst den gewünschten Objekttyp und schließlich rechts das Objekt (oder die Objekte, wenn Sie die Maustaste gedrückt halten), für das Sie Rechte vergeben möchten.

Hierbei bedeutet das besondere Objekt „Neue Tabellen/Abfragen“ (bzw. „Neue Formulare“ etc.), daß Sie die Rechte für neu zu erstellende Objekte gleich mit verge- ben, bevor die Objekte erstellt sind; so müssen Sie nicht nach jeder neuen Objekter- stellung neue Benutzerrechte vergeben.

Wählen Sie dann in der Optionsgruppe „Berechtigungen“ unten rechts die Rechte einzeln aus, die Sie dem ausgewählten Benutzer bzw. der ausgewählten Gruppe ertei- len möchten. Wundern Sie sich dabei nicht, wenn Access ein bißchen Eigenaktivität entfaltet und Rechte aktiviert, die Sie gar nicht ausgewählt haben. Hier handelt es sich um Rechte, die unabdingbare Voraussetzung für ein von Ihnen ausgewähltes Recht darstellen (z.B. wird automatisch das Recht „Entwurf lesen“ mit eingetragen, wenn Sie das Recht „Daten lesen“ aktivieren).

7.5. Benutzerverwaltung in einem Netzwerk

Wenn Sie Access auf einem Netzwerk einsetzen (was sehr wahrscheinlich ist, wenn Sie bereits Benutzerkonten vergeben), dann müssen Sie noch darauf achten, daß alle Be- nutzer auf die gleiche Systemdatenbank (system.mda) zugreifen. Dazu muß diese Datei auf das Netzwerk kopiert werden (Wenn Access auf dem Netzwerkserver instal- liert ist, wird das der Fall sein; falls Sie aber mit einer lokalen Installation von Access arbeiten, sollten Sie sich an Ihren Netzwerk-Verwalter wenden, damit diese Sy- stemdatenbank (in der Access-Sprache auch manchmal irreführend „Arbeitsgruppe“

Abbildung 25: Zuteilung einzelner Berechtigungen

Abbildung 25: Zuteilung einzelner Berechtigungen

58

Access 2.0 für Fortgeschrittene

genannt) auf den Server kopiert wird.

Dann müssen Sie alle Benutzer (d.h. alle PCs, die Access installiert haben) mit Hilfe des Programms „Access Arbeitsgruppen-Administrator“ an diese Netzwerk- Arbeitsgruppe anschließen. Falls bei Ihnen das Programm-Icon aus der Windows- Oberfläche entfernt worden sein sollte, finden Sie es auch im Datei-Manager in dem gleichen Verzeichnis, in dem auch Access selbst installiert ist, unter dem Namen „wrkgadm.exe“.

Starten Sie dieses Programm, und wählen Sie die Schaltfläche „Anschließen“. Tragen Sie dann den kompletten Pfad zu Ihrer Systemdatenbank, die auf dem Server liegt, ein, und bestätigen Sie. Damit sind Sie mit der Netzwerk-Arbeitsgruppe verbunden, mit anderen Worten, Access bekommt die Informationen darüber, welche Benutzer exi- stieren, aus der Server-Version der system.mda-Datei.

Diese Schritte müssen Sie für alle Access-Installationen Ihres Netzwerkes durchfüh- ren, damit von allen Rechnern aus nicht mehr auf die lokale Systemdatenbank, sondern auf die Netzwerkversion zugegriffen wird. Lassen Sie sich dabei bitte von Ihrem Netzwerk-Verwalter unterstützen, wenn Sie selbst nicht über ausreichende Netzwerk- Kenntnisse verfügen (was keine Schande wäre).

8. Schmankerl in Access

Im folgenden Kapitel sind in loser Reihenfolge kleine Tips aufgeführt, mit denen Sie Ihre Datenbankanwendung noch professioneller gestalten können, falls Sie Zeit dafür haben. Sie greifen z.T. in Dinge ein, die Sie bisher noch nicht kennengelernt haben (zumindest nicht im Kurs), aber das muß ja nicht schaden. Gehen Sie jedenfalls sicher, daß Sie mit einer Sicherheitskopie Ihrer Datenbankanwendung arbeiten, bevor Sie Dinge tun, von denen Sie nicht genau wissen, was sie anstellen.

8.1. Eigenes „Outfit“ für die Anwendung

Der erste kleine Tip betrifft das „Outfit“ der Datenbankanwendung, für alle diejenigen, die verbergen möchten, daß sie die Anwendung mit Access erstellt haben (dann kön- nen Sie jedem erzählen, Sie hätten alles selbst programmiert). Dazu gibt es zwei kleine Schmankerl:

Unterdrückung des Startbildes von Access beim Programmstart; statt des- sen können Sie ein eigenes Bild anzeigen lassen,

Unterdrückung der Standard-Access-Titelleiste (Microsoft Access); statt dessen können Sie den Namen Ihrer Anwendung eintragen.

Beide Dinge werden nicht in Access selbst, sondern in der Datei „msacc20.ini“, die in Ihrem Windows-Verzeichnis liegt, geregelt. Öffnen Sie diese Datei mit einem Editor Ihres Vertrauens (z.B. indem Sie im Windows-Datei-Manager auf den Dateinamen „msacc20.ini“ doppelklicken)

8. Schmankerl in Access

59

In diese Datei sollten Sie dann einen eigenen Abschnitt einfügen (etwa nach dem „[options]“-Abschnitt), der folgendermaßen aussieht:

[Run-Time Options]

StartUpScreen=c:\

TitleBar=Bibliotheksverwaltung

Damit wird das Bild „c:\

men und einen Dateinamen eintragen, in dem sich Ihr Wunschbild befindet) zu Beginn der Ausführung von Access statt des Standard-Fensters mit dem Access-Symbol und dem Programmnamen angezeigt.

Außerdem wird die Titelzeile des Access-Bildschirms (die standardmäßig auf „Microsoft Access“ lautet) hier auf „Bibliotheksverwaltung“ gesetzt; auch da tragen Sie natürlich die Überschrift ein, die Sie gerne hätten.

Speichern Sie dann diese Datei mit Ihrem Editor; beim nächsten Start von Access werden Ihre Voreinstellungen übernommen. Das gilt natürlich nur für die Access- Installation, deren „msacc20.ini“-Datei Sie verändert haben (i.d.R. wird diese lokal auf Ihrem PC liegen). Die INI-Dateien der anderen Teilnehmer auf dem Netzwerk sind davon dann nicht betroffen; dazu müßten Sie dieses Änderungen an allen Arbeitssta- tionen durchführen. Fragen Sie dazu Ihren Netzwerk-Administrator.

\bild.bmp

\bild.bmp

(da müssen Sie natürlich einen Pfadna-

8.2. Anzeigen des Arbeitsfortschritts

Wenn Sie Makros erstellen, die sehr viele Aktionen nacheinander ausführen und daher eine Weile dauern, können Sie dem Benutzer die Zeit ein bißchen vertreiben, indem Sie unten in der Statusleiste einen blauen Balken darstellen lassen, der den Ar- beitsfortschritt in Prozent anzeigt. Dazu gibt es eine Access-BASIC-Funktion SysCmd, die unter anderem diese Aufgaben erfüllen kann. Falls Ihr langwieriges Pro- gramm eine BASIC-Funktion ist, können sie die Funktion SysCmd direkt von dort aufrufen; in einem Makro müssen Sie für jeden Aufruf der Funktion eine Ausführen- Code-Aktion einfügen, die als einziges Argument den Funktionsnamen mit den ent- sprechenden Parametern hat. Die Funktionsaufrufe müssen folgendermaßen aussehen:

Um den Balken zu initialisieren, also zu Beginn des langwierigen Ma- kros, müssen Sie die Funktion SysCmd(1, "Text vor dem Bal- ken:", MaxAnzahl) aufrufen. Damit wird der Fortschrittsanzeiger dargestellt; vor dem blauen Balken steht der Text, der als zweites Argu- ment übergeben wurde. MaxAnzahl bestimmt, wie viele Schritte Ihr Ma- kro hat.

Nach jedem Arbeitsschritt tragen Sie den neuen Arbeitsvorgang im Bal- ken mit der Funktion SysCmd(2, AktuelleAnzahl) ein. Hierbei bestimmt der Quotient aus AktuelleAnzahl und MaxAnzahl, wie viel Pro- zent des gesamten Arbeitsablaufes bereits passiert sind. Wenn Sie ganz präzise Prozentzahlen ausgeben möchten, können Sie als MaxAnzahl 100 wählen, so daß Sie bei AktuelleAnzahl immer genau die Prozente eintragen können.

60

Access 2.0 für Fortgeschrittene

Um am Ende die Statuszeile wieder zurückzusetzen, müssen Sie die Funktion SysCmd(3) aufrufen. Vergessen Sie das nicht, sonst ist Ihr voller Balken immer in der Statuszeile zu sehen

8.3. Kontrolle über das Programmende

Oft empfiehlt es sich, den Benutzer daran zu hindern, das Programm aus Versehen zu beenden. Vor allem muß dafür gesorgt sein, daß der Benutzer das Hauptmenü- Formular nicht schließen kann; sonst stünde er auf einmal vor dem leeren Access- Bildschirm (das Datenbankfenster ist ja in der Regel ausgeblendet), und wüßte nicht mehr, was zu tun ist.

Dafür müssen mehrere Dinge realisiert sein:

1. Das Hauptmenü-Formular darf nicht geschlossen werden können, es sei denn, Access wird gleich mitgeschlossen.

2. Die Tastenkombination Alt+F4 darf nur nach einer Kontrollabfrage zum Beenden der Anwendung führen

3. Ein eigener Menübefehl „Datei/Beenden“ muß ebenfalls nach einer Sicher- heitsabfrage die Anwendung beenden.

Das klingt zwar ganz einfach, braucht aber ein bißchen Aufwand. Zunächst brauchen Sie ein unsichtbares (ausgeblendetes) Formular, das der Benutzer weder einblenden noch schließen kann. Es ist ungebunden und enthält ein (natürlich auch ungebunde- nes) Ja/Nein-Feld (z.B. ein Kontrollkästchen), das den hübschen Namen „BeendenErlauben“ trägt (in der Eigenschaft „Steuerelementname“).

Dieses Steuerelement wird Ihre Schaltzentrale: Wenn es auf „Ja“ steht, darf die An- wendung beendet werden, andernfalls nicht. Der Standardwert muß demnach auf

Außerdem ist dieses Formular der Versicherungsanker ge-

gen Alt+F4: Wenn der Benutzer diese Kombination tätigt, versucht Access, auch die- ses Formular zu schließen. Das nutzen Sie schamlos aus, um das Beenden zu verhin- dern: Sie fügen dem Formular eine Ereignisprozedur zum Ereignis „Bei Entladen“ hin- zu, die folgendermaßen aussieht:

Sub Form_Unload (Cancel As Integer) If [BeendenErlauben] <> True Then If MsgBox("Wirklich beenden?",36,"Bibliothek") = 6 Then [BeendenErlauben] = True Else Cancel = True End If End If End Sub

„Nein“ eingestellt werden

Das macht folgendes: Wenn der Wert des Steuerelements „BeendenErlauben“ ungleich „True“ ist (sprich: Das Kontrollkästchen ist nicht aktiviert), wird eine Kontrollabfrage angezeigt, in der der Benutzer entweder „Ja“ oder „Nein“ auswählen kann. Wenn er „Ja“ auswählt (Rückgabewert ist dann 6), wird Ihre Schaltzentrale auf „Ja“ gestellt, andernfalls wird mit dem Befehl „Cancel = True“ bestimmt, daß der Schließvorgang

8. Schmankerl in Access

61

(und damit das Beenden von Access) abgebrochen wird. So wäre schon einmal sicher- gestellt, daß per Alt+F4 kein unkontrolliertes Programmende geschehen kann.

Speichern Sie dieses Formular unter dem Namen „Unsichtbares Formular“ und sor- gen Sie dafür, daß dieses Formular immer beim Laden Ihrer Anwendung ausgeblendet geöffnet wird (im Makro „AutoExec“ mit der Aktion „ÖffnenFormular“, Fenstermo- dus „Ausgeblendet“).

Der nächste Schritt ist, das Hauptmenü am Geschlossen-Werden zu hindern. Dazu wird ebenfalls eine Ereignisprozedur an das Ereignis „Bei Entladen“ geknüpft, die das Schließen immer dann unterbindet, wenn Ihre Schaltzentrale das Beenden verbietet, das Kontrollkästchen „BeendenErlauben“ also auf „Nein“ steht. Die sieht dann so aus:

Sub Form_Unload (Cancel As Integer) If Forms![Unsichtbares Formular]!BeendenErlauben=False Then

Cancel = True End If End Sub

Damit ist auch das Schließen des Hauptmenüs unterbunden. Das haben Sie zwar ver- mutlich sowieso schon z.T. dadurch realisiert, daß Sie dem Hauptmenü-Formular kei- nen Rahmen gegeben haben, so gibt es wenigstens keinen Systemknopf, mit dem der Benutzer schließen könnte. Aber der Tastaturbefehl Ctrl+F4 könnte das Formular noch schließen, was hiermit unterbunden ist.

Bleibt als letztes noch der Menüpunkt „Datei/Beenden“, der in die Menüleiste des Hauptmenüs gehört. Dessen Makro sollte folgendermaßen aussehen:

Bedingung

Aktion

Meldung("Wirklich beenden?"; 36; "Bibliothek") =6

SetzenWert

(Formulare![Unsichtbares

Formular]!

BeendenErlauben, Ja)

 

Beenden

Damit wird zuerst wieder eine Sicherheitsabfrage gestartet. Wenn der Benutzer „Nein“ wählt, passiert gar nichts, wenn er „Ja“ wählt, wird Ihre Schaltzentrale auf „Ja“ ge- setzt, wodurch alle anderen Sicherheitsmechanismen, die Sie gerade installiert werden, außer Kraft gesetzt werden, und dann wird die Aktion „Beenden“ aufgerufen, die Ac- cess dann reibungslos verläßt.

Stichwortverzeichnis

(Hauptfundstellen sind jeweils fett gedruckt)

— # —

#Fehler!

29

— A —

Abfragen

5, 22, 27

Aktionsabfragen

13

Aktualisierungsabfrage

14, 41

Anfügeabfrage

15

Assistent

18

Auswahlabfragen

5

Berechnete Felder

12

Daten sortieren

5

Datensätze zusammenfassen Entwurfsansicht

5, 9, 16 5, 7, 12

Kreuztabellenabfrage

15

Kriterien Kriterien verknüpfen

6, 7, 10, 15, 17 7, 10, 15

Löschabfrage

15

Mit Makro öffnen

34

Mit Makro schließen

35

Parameterabfragen

10

Pfeilsymbol in Beziehung

9

Symbolleiste

13

Tabelle erstellen

13

Variable Kriterien

10

Access Originaldokumentation

1

Version 7.0

1

Administrator

56

Administratoren (Gruppe)

55

Aggregatfunktionen

5

Anzahl

5, 8, 17

Domänenfunktionen

26

Max

9

Mittelwert

6

Summe

6

Aktionen

AbbrechenEreignis

31, 32, 33

33, 36, 38, 39, 43

AktualisierenDaten

22

AusführenCode

49

AusführenMakro

33, 36, 49

AusführenMenübefehl

34, 36, 41, 49, 53

AuswählenObjekt

53

Beenden

34, 62

GeheZuSteuerelement

36

HinzufügenMenü

48

Meldung

ÖffnenAbfrage

ÖffnenBericht

ÖffnenFormular

34, 38, 53

34, 41

34, 41

31, 34, 41, 42, 61

ÖffnenTabelle

34

Parameter

31

Schließen

35

SetzenWert

35, 44, 62

StopAlleMakros

36, 38

StopMakro

36, 38, 39, 53

SuchenDatensatz

36

SuchenWeiter

36

Tastaturbefehle

36, 51, 53

Warnmeldungen

36

Aktualisierungsabfrage

14

Alt (Tastenkombinationen)

24

Anfügeabfrage

15

Anzahl (Aggregatfunktion)

8, 17

Arbeitsgruppe

58

Arbeitsgruppen-Administrator

58

Archiv erstellen

13

Assistenten AutoFormular

4

Befehlsschaltflächenassistent

24

Einspaltiges Formular

4

Gruppierung

5

Haupt-/Unterformular

4

Kombinationsfeldassistent

23

Kreuztabellenabfrage

18

Listenfeldassistent

23

Menü-Editor

48

Optionsgruppenassistent

23

Steuerelementassistenten

20

Tabellarische Darstellung

5

Ausdruck1 (Feldname)

12

Ausdrücke

siehe Formeln

AutoFormular

4

64

Access 2.0 für Fortgeschrittene

— B —

Bedingungen Variable Bedingungen Verknüpfen (in Makros)

Beenden von Access

Befehlsschaltfläche

10

39

34

Siehe Steuerelemente

Befehlsschaltflächenassistent

24

Beispieldatenbank

2

Abfrage „Ausleihinformationen“

4

Abfrage „Ausleihstatistik“

5

Abfrage „Inventurliste“

8

Abfrage „Leserinformationen“

4

Abfrage „Leserstatistik“

5

Abfrage „Pauschalverlängerung“

14

Abfragen

5

Bericht „Ausleihstatistik“

5

Bericht „Mahnungen“

5

Berichte

5

Beziehungen

4

Formular „Ausleihen“

4

Formular „Büchereingabe“

4

Formular „Lesereingabe“

4

Formulare

4

Tabelle „Ausleihen“

4

Tabelle „Bücher“

3, 4

Tabelle „Leser“

3, 4

Tabelle „Lesergruppen“

3

Tabellenstruktur

3

Benutzer (Gruppe)

55

Benutzer() (Funktion)

41, 53

Benutzerkennung

54

Benutzerverwaltung

53

Administrator

53, 55, 56

Arbeitsgruppe

58

Benutzer rekonstruieren

56

Benutzergruppen

55

Benutzerkonten einrichten

54

Berechtigungen

53

Berechtigungen zuweisen

57

Datenschutz

57

Grundprinzipien

53

Gruppen anlegen

55

Gruppenberechtigungen