D a t e n b a n k e n tw i c k l u n g u n d D a t e n b a n k b e n u t z u n g (Microsoft Access) Übersicht 1. Allgemeines ................................................................................................................................................... 1 1.1. Was ist eine Datenbank? ................................................................................................................ 1 1.2. Aufbau von Access ......................................................................................................................... 1 2. Anlegen einer Datenbank .............................................................................................................................. 2 3. Anlegen von Tabellen .................................................................................................................................... 2 4. Verbinden von Tabellen ................................................................................................................................. 8 5. Arbeiten mit Tabellen ................................................................................................................................... 10 5.1. Datensätze sortieren ..................................................................................................................... 10 5.2. Datensätze filtern .......................................................................................................................... 11 5.3. Datensätze suchen ....................................................................................................................... 11 6. Abfragen ...................................................................................................................................................... 11 6.1. Einfache Auswahlabfragen ........................................................................................................... 11 6.2. Anwendung spezieller Abfragekriterien ........................................................................................ 14 7. Erstellen von Eingabeformularen ................................................................................................................ 15 7.1. Eingabeformulare mittels Auswahlabfragen erstellen ................................................................... 15 7.2. Eingabeformulare mittels Parameterabfragen erstellen................................................................ 17 8. Datenauswertung......................................................................................................................................... 19 9. Berichte ........................................................................................................................................................ 20 10. Verknüpfte Formulare ................................................................................................................................ 22 11. Spezialabfragen ......................................................................................................................................... 22 11.1. Kreuztabellenabfragen ................................................................................................................ 23 11.2. Tabellenerstellungsabfragen ....................................................................................................... 24 11.3. Löschabfragen............................................................................................................................. 24 11.4. Anfügeabfragen ........................................................................................................................... 25 11.5. Aktualisierungsabfragen .............................................................................................................. 26 11.6. Abfragen über Abfragen .............................................................................................................. 26 12. Formulare manuell bearbeiten ................................................................................................................... 27 12.1. Bestandteile von Formularen ...................................................................................................... 27 12.2. Arbeitstechniken .......................................................................................................................... 28 13. Steuerelemente erstellen ........................................................................................................................... 29 13.1. Steuerelemente hinzufügen mit der Feldliste .............................................................................. 30 13.2. Steuerelemente hinzufügen mit der Toolbox .............................................................................. 30 14. Makros ....................................................................................................................................................... 33 15. Kombinationsfelder und deren Synchronisation ........................................................................................ 37 16. Formulare mit Suchfunktion ....................................................................................................................... 41 1. Allgemeines 1.1. Was ist eine Datenbank? Unter einer Datenbank versteht man ein Sammlung von Daten zu einem bestimmten Thema oder Zweck. So enthält etwa eine Adressdatenbank eine Vielzahl von Adressen (etwa von Kunden). Die einzelnen Informationen, die es zu verwalten gilt, werden als Daten bezeichnet. Sinnvollerweise werden Daten immer geordnet an einem bestimmten Ort aufbewahrt, z.B. in einem Aktenschrank. Die Sammlung von Daten in einer computergestützten Datenbank bietet vielfältige Möglichkeiten, die Informationen auszuwerten, da durch die Struktur der Datenbank ein schneller Zugriff auf die gewünschten Informationen möglich ist. 1.2. Aufbau von Access Access ist ein objektorientiertes Datenbanksystem. Objekte stellen geschlossene Elemente dar, die als Einheit ausgewählt (markiert) und gehandhabt werden können. Die Daten werden in Tabellen gespeichert (relationale Datenbank). Folgende Objekte stehen zur Wahl: Tabellen Eine Tabelle enthält eine Sammlung von Daten zu einem bestimmten Thema. Jede Zeile einer Tabelle entspricht einem Datensatz. 1 Abfragen Formulare Berichte Seiten Makros Module Mit einer Abfrage können Daten einer oder mehrerer Tabellen ausgewertet werden, z.B können alle Kundenadressen aus einem bestimmten Bundesland ermittelt werden. Formulare dienen zur Ansicht, Eingabe und Bearbeitung von Daten aus Tabellen oder Abfragen. In Berichten werden Daten aus Tabellen oder Abfragen zusammengefasst und anschaulich dargestellt. Beispielsweise kann eine Liste aller Kundenadressen erstellt und ausgedruckt werden. (Datenzugriffs-)Seiten sind spezielle Web-Seiten, um Daten der Access-Datenbank im Internet oder Intranet darstellen zu können. Mit Hilfe von Makros können Datenbanken automatisiert werden. Es handelt sich dabei um eine Liste von Aktionen, die automatisch ablaufen sollen. Access beinhaltet die Programmiersprache VBA, mit der Access programmiert werden kann. 2. Anlegen einer Datenbank Um eine neue Datenbank anzulegen, öffnet man das Programm Microsoft Access. Durch einen Klick auf Leere Datenbank im Aufgabenbereich, öffnet sich folgender Dialog: Sollte der Arbeitsbereich beim Programmstart nicht eingeblendet werden, kann dieser durch den Menübefehl DATEI – NEU wieder aufgerufen werden. Als nächstes wird man aufgefordert, die Datenbank zu benennen und in einem definierten Verzeichnis abzuspeichern. Als Dateierweiterung wird dabei immer MDB (für Microsoft Data Base) verwendet. Alle Objekte (Tabellen, Formulare usw.) und Daten sind zusammen abgespeichert. Außerhalb von Access besteht keine direkte Zugriffsmöglichkeit auf eine einzelne Tabelle. Hinweis: Es soll nach Möglichkeit vermieden werden, mit Access von der Diskette zu arbeiten, denn wenn später Objekte erstellt und bearbeitet werden, wird das System sehr langsam. 3. Anlegen von Tabellen Es soll eine Datenbank zur Schülerverwaltung aufgebaut werden. Sämtliche Daten der Datenbank werden dabei in Tabellenform abgespeichert. Zusammengehörige Daten sind dabei jeweils in (waagrechten) Zeilen angeordnet – eine Zeile wird als Datensatz bezeichnet. Gleichartige Daten (wie Straße oder PLZ) sind in (senkrechten) Spalten angeordnet – diese werden Felder genannt. Ganz oben in der Tabelle stehen die Feldnamen: Vorname, Nachname, Straße, PLZ, Ort usw. Möchte man eine Datenbank zu einem bestimmten Thema anlegen, ist zuerst der tabellarische Aufbau zu überlegen. In unserem Beispiel soll die Verwaltung der Schülerdaten auf drei Tabellen aufgeteilt werden. Semester 1: n Studierende 1: n Noten 2 Die hier eingezeichneten Pfeile stellen die Verbindungen zwischen den einzelnen Tabellen dar. Man spricht von sog. Beziehungen. Die einzelnen Tabellen sind also nicht unabhängig voneinander, sondern zusammengehörige Daten sind über mehrere Tabellen verteilt. Das ist das Grundprinzip der RELATIONALEN DATENBANK. Sinn und Zweck der Datenaufteilung ist es, Redundanzen (also mehrmaliges Abspeichern derselben Information) zu vermeiden und so die Effizienz der Datenbank zu steigern. Folgende Anforderungen werden an Datenbanken gestellt: Sämtliche Informationen sollen einfach aufgenommen und gepflegt werden können. Bestimmte Informationen sollen gezielt gesucht werden können und schnell zur Verfügung stehen. Informationen sollen einfach weiterverwendet werden können, z.B. für Auswertungen, Berichte, Serienbriefe usw. Im oben genannten Beispiel ergibt sich durch die Aufteilung der Daten in drei Tabellen folgender Vorteil: Nehmen wir an, die Studierenden Huber und Maier haben die Noten 2,4,3 und 2,1,1. Würde man alle Daten in einer Tabelle zusammenfassen, müsste man dasselbe Semester 6-mal eingeben sowie jeden Studierenden 3-mal und es entstünden folgende Datensätze: 7E 7E 7E 7E 7E 7E Huber Huber Huber Maier Maier Maier 2 4 3 2 1 1 Durch die Verteilung in verschiedene Tabellen melden wir das Semester jeweils einmal mit. Zu jedem Semester werden also die Studierenden eingegeben und zu jedem Studierenden die Noten. Dadurch werden Mehrfacheingaben vermieden! In der Tabelle “Semester“ wird jedem Semester eine eindeutige Zahl zugewiesen. So bekommt z.B. das 7ESemester die Nummer 1, das 5B-Semester die Nummer 2 usw. In der Tabelle “Studierende“ wird jedem Studierenden nur mehr 1 oder 2 angefügt, wodurch jeder Studierender automatisch einem Semester zugeordnet ist, ohne dass in der Studierenden-Tabelle die Semesterbezeichnungen angeführt werden. Dasselbe Schema wird in der Beziehung zwischen Studierenden-Tabelle und Notentabelle verwendet. Jedem Studierenden wird eine eindeutige Zahl zugeordnet, welche dann auch in der Tabelle “Noten“ aufscheint. Zur Verdeutlichung sei noch der Studierende Berger aus dem 5B-Semester angeführt. Die Tabellen der Datenbank sehen dann so aus: Semester Semester Nummer1 7E 1 5B 2 Nummer 1 1 1 2 Studierende Name Huber Maier Berger Nummer 2 a b c Noten Nummer 2 Note a 2 a 4 a 3 b 2 b 1 b 1 c 4 c 3 c 3 Die eindeutigen Zahlen für die Semester (Nummer 1) und für die Studierenden (Nummer 2) werden vom Programm automatisch vergeben und brauchen somit vom Anwender nicht selbst eingegeben werden. Diese eindeutigen Felder werden in Access als sog. Primärschlüssel bezeichnet. In der Tabelle “Semester“ wird also automatisch jedem Semester eine Zahl zugewiesen, welche natürlich in der Tabelle “Studierende“ wieder aufscheinen muss. Es ist darauf zu achten, dass beim Anlegen von Tabellen die Primärschlüssel von übergeordneten Tabellen miteinbezogen werden, da ansonsten ein Verbinden der Tabellen nicht möglich ist. Für das Anlegen einer Datenbank sind also vorbereitende Schritte notwendig, da die Struktur der Datenbank schon zu Beginn feststehen sollte. 1. Festlegung der Datenbankstruktur (Art und Aufbau der Tabellen, Beziehungen zwischen den Tabellen) 2. Definition und Erfassung der Tabellenstrukturen 3. Verknüpfung der angelegten Tabellen 4. Dateneingabe und Datenpflege 5. Erstellung von Formularen (zur Vereinfachung der Datenerfassung) 3 6. Erstellung von Abfragen (zum Herausfiltern gezielter Informationen aus einer Vielfalt an Daten) 7. Erstellung von menügesteuerte Anwendungen mittels Makros bzw. VBA-Programmierung (zur Erhöhung der Benutzerfreundlichkeit bei häufig verwendeten Datenbanken) TABELLEN Basis jeder relationalen Datenbank Tabellen Abfragen Berichte Formulare Zum Anlegen einer neuen Tabelle wird das Objekt Tabelle im Datenbankfenster ausgewählt und dann das Symbol NEU gewählt. Man kann eine neue Tabelle aber auch über das Menü EINFÜGEN – TABELLE oder das Symbol NEUES OBJEKT: TABELLE einfügen. Sowohl Tabellen als auch Abfragen, Formulare und Berichte lassen sich jeweils in verschiedenen Ansichten darstellen. In der Entwurfsansicht werden Objekte entworfen, definiert, ihre Struktur und ihr Aussehen festgelegt. Die Datenblattansicht (bei Tabellen und Abfragen), die Formularansicht (bei Formularen) bzw. die Seitenansicht (bei Berichten) zeigt das jeweils fertige Objekt. Beim Anlegen einer Tabelle werden für jedes anzulegende Feld ein Feldname und der dazugehörige Felddatentyp definiert. Hier die wichtigsten Felddatentypen: Felddatentyp Text Eingabe beliebiger Text und Zahlen (bis zu 255 Zeichen) Memo beliebiger Text und Zahlen (bis zu 32.000 Zeichen); innerhalb eines Memo-Feldes kann mit STRG+ENTER ein Zeilenumbruch erzeugt werden, was eine übersichtlich Darstellung langer Texte ermöglicht beliebiger numerischer Wert, mit dem auch Berechnungen möglich sind Datum- und Zeitwerte (können meist in verschiedenen Formaten eingegeben werden; werden nach der Eingabe in vordefinierte Form umgewandelt) Zahl mit einer Genauigkeit von bis zu 15 Stellen und 4 Dezimalstellen (standardmäßig erfolgt die Darstellung mit Tausendertrennzeichen und 2 Dezimalstellen) Zahl, die von Access automatisch vergeben wird, wenn der Tabelle ein neuer Datensatz angefügt wird Feld, das nur 2 Werte annehmen kann; Aktivieren und Deaktivieren wird durch Anklicken eines Kontrollfeldes erreicht; programmintern wird ja als 1 und nein als 0 gespeichert OLE = Object Linking and Embedding – Einbindung von Objekten aus anderen Programmen (z.B. Bilder, Grafiken, Text- oder Tabellenausschnitte) Adressen auf der lokalen Festplatte, im Netzwerk oder Internet; Adresse wird nach der Eingabe standardmäßig als Hyperlink dargestellt Zahl Datum/Uhrzeit Währung AutoWert Ja/Nein OLE Hyperlink Beispiel A-5020 0662/234567 ISBN 1-55615-877-7 für ausführliche Anmerkungen und nähere Erläuterungen oder Beschreibungen zu einem Datensatz (z.B. Gesprächsnotizen) 3456,78 3.456,78 03:12:00 11.09.01 12:15 24. Dez. 2004 1.111,11 9999,99 € 1.Datensatz erhält den Wert 1, 2.Datensatz den Wert 2 usw. das eingebettete Objekt wird durch einen Doppelklick in der Tabelle mit dem entsprechenden Programm geöffnet 4 Nachschlageassistent Kombinations- oder Listenfelder – der Benützer wählt aus einer Palette vorgegebener, oder aus einer Tabelle stammender Werte Zusätzlich gibt es zu jedem Felddatentypen eine Anzahl verschiedener Argumente, die die Feldeigenschaften genauer definieren. Diese Feldeigenschaften werden für das jeweils aktuelle Datenfeld angezeigt. Mit Hilfe dieser Argumente lässt sich die Funktionalität der Tabellen verbessern. Es ist dadurch möglich, Zahlen zu formatieren, die Lesbarkeit zu erhöhen oder Fehlermeldungen bei Falscheingaben zu vermeiden. Feldeingabebereich Feldeigenschaftenbereich Informationsbereich Übersicht der wichtigsten Feldeigenschaften: Feldgröße Format Eingabeformat Dezimalstellenanzeige Beschriftung Standardwert Gültigkeitsregel Gültigkeitsmeldung Eingabe erforderlich Leere Zeichenfolge Indiziert Legt die Anzahl der Zeichen fest, die maximal in das Feld eingegeben werden können. Durch das Format wird das spätere Anzeigeformat (Darstellungsformat) für den Feldinhalt festgelegt. Definiert ein Muster für alle Daten, die später in das Feld eingegeben werden (z.B. eine Schablone für ein internationales PLZ-Format). Festlegung der Anzahl der Dezimalstellen nach dem Komma bei Zahlen- oder Währungsfeldern Abweichend vom Feldnamen kann eine Feldbezeichnung eingegeben werden, die dann in der Datenblattansicht von Tabellen (und später auch in Berichten und Formularen) als Spaltenbeschriftung erscheint. Gibt an, mit welchem Inhalt das Feld bei der Eingabe neuer Datensätze vorbelegt sein soll. Trifft der Standardwert bei der Dateneingabe nicht zu, kann er einfach überschrieben werden. Unmittelbar nach der Eingabe wird mit dieser Regel die korrekte Eingabe der Werte überprüft (z.B. bei PLZ >=1000) Fehlermeldung bei falscher Eingabe aufgrund der Gültigkeitsregel Bestimmt, ob beim späteren Ausfüllen eines Datensatzes eine Eingabe in das Feld erforderlich ist Hier wird bestimmt, ob eine leere Zeichenfolge (= doppelte Anführungszeichen hintereinander ″″) als gültiger Eintrag akzeptiert wird. Wenn eine Eingabe zwingend erforderlich ist, sollte für die Eigenschaft “Eingabe erforderlich“ Ja gewählt werden und die Eigenschaft “Leere Zeichenfolge“ auf Nein gestellt werden. Die Eigenschaft “Indiziert“ sollte dann auf Ja gestellt werden, wenn die Tabelle häufig nach diesem Feld sortiert wird oder oft nach einem Wert in diesem Feld gesucht wird. Bei Ja (Duplikate möglich) kann ein bestimmter Wert mehrfach auftreten, während bei Ja (Ohne Duplikate) der Wert eindeutig ist, d.h. in der Tabelle nur einmal auftritt. Besonderheiten bei Zahlenformaten von numerischen Feldern: 5 Durch die Festlegung der Feldgröße wird der Bereich der Werte bestimmt, die in dieses Feld eingegeben werden können und somit wie groß der benötigte Speicherplatz ist. Standardmäßig ist die Feldgröße auf Integer bzw. Long Integer eingestellt. Variante Byte Integer Long Integer Dezimal Single Double Replikations-ID Wertebereich Speichert Zahlen von 0 bis 255 (keine Bruchzahlen und keine Dezimalstellen) Ganze Zahlen zwischen -32.768 und 32.768 Ganze Zahlen zwischen -2.147.483.648 und 2.147.483.648 (keine Bruchzahlen und keine Dezimalstellen) Dezimalzahl, Genauigkeit der Stellen hinter dem Komma kann eingestellt werden Dezimalzahlen mit 7-stelliger Genauigkeit Dezimalzahlen mit 15-stelliger Genauigkeit GUID = Globally Unique Identifier, wird bei der Replikation eingesetzt Speicherbedarf 1 Byte 2 Bytes 4 Bytes 4 Bytes 8 Bytes 16 Bytes Beim Format können für Zahlenfelder folgende Argumente gewählt werden: Variante Allgemeine Zahl Währung Beispielzahl 9876,4 9876,4 Festkommazahl 9876,4 Standardzahl 9876,4 9876,4 9.876,4 € 9876,40 9.876,40 Prozentzahl 0,445 44,5% Exponentialzahl 1234,5 1,23E+03 Anzeige Anzeige entspricht der Eingabe Anzeige mit Tausendertrennzeichen, 2 Kommastellen und Währungszeichen Anzeige mit mindestens einer Ziffer und 2 Dezimalstellen Anzeige mit Tausendertrennzeichen und 2 Dezimalstellen Für die Anzeige wird der Wert mit 100 multipliziert und das Prozentsymbol angefügt Anzeige als Exponentialzahl auf Basis 10 Bei der Definition von Datums- und Zeitformaten stehen folgende Varianten zur Verfügung: Variante Standarddatum Datum, lang Datum, mittel Datum, kurz Zeit, lang Zeit, 12 Std. Zeit, 24 Std. Hinweise Tages- und Monatsnamen werden ausgeschrieben Monatsnamen werden dreistellig angezeigt mit Sekundenanzeige AM-/PM-Anzeige 24-Stunden-Anzeige Beispiel 11.11.2001 11:11:30 Donnerstag, 11. November 2001 11. Nov 2001 11.11.2001 11:11:30 4:35 16:35 Mit Hilfe bestimmter Zeichen lässt sich festlegen, ob und wie bestimmte Daten eingegeben werden sollen. Im folgende sind die wichtigsten Zeichen zur Definition von Formaten aufgelistet: 0 9 # L ? & C .,:;-/ < > ! \ Ziffer (0 bis 9, Eingabe erforderlich, Plus-[+] und Minuszeichen [-] nicht erlaubt) Ziffer oder Leerzeichen (Eingabe nicht erforderlich, Plus- und Minuszeichen nicht erlaubt) Ziffer oder Leerzeichen (Eingabe nicht erforderlich, Leerzeichen werden als Leerzeichen im Bearbeitungsmodus angezeigt, aber beim Speichern entfernt, Plus- und Minuszeichen erlaubt) Buchstabe (A bis Z, Eingabe erforderlich) Buchstabe (A bis Z, Eingabe optional) Beliebiges Zeichen oder Leerzeichen (Eingabe erforderlich) Beliebiges Zeichen oder Leerzeichen (Eingabe nicht erforderlich) Platzhalter für Dezimaltrennzeichen sowie Tausender-, Datums- und Zeittrennzeichen (das tatsächlich verwendete Zeichen hängt von den Einstellungen bei den Ländereinstellungen in der Systemsteuerung von Windows ab) Alle Buchstaben werden in Kleinbuchstaben umgewandelt. Alle Buchstaben werden in Großbuchstaben umgewandelt. Bewirkt, dass die Anzeige im Eingabeformat von rechts nach links anstatt von links nach rechts erfolgt. Eingegebene Zeichen füllen das Eingabeformat immer von links nach rechts aus. Durch dieses Zeichen kann die Wirkung von Sonderzeichen aufgehoben werden (Bsp.: \L wird als L angezeigt) Es soll nun die Tabelle “Semester“ in der Entwurfsansicht angelegt werden. Notwendige Daten hierfür sind: das Semester (z.B. 7E) 6 der Raum (z.B. 1.Stock, 112) das Schuljahr (z.B. WS 04/05) ein eindeutiger Zähler für jedes Semester (also der AutoWert) TABELLE SEMESTER Feldname ID-Semester Semester Felddatentyp AutoWert Text Raum Schuljahr Text Text Argument Feldgröße: 2 Eingabeformat: 0L Feldgröße: 10 Feldgröße: 10 Damit diese Tabelle dann mit der Tabelle “Studierende“ verbunden werden kann, ist es erforderlich, ein eindeutiges Verknüpfungsfeld zu kennzeichnen, welches als Primärschlüsselfeld bezeichnet wird. In der Tabelle “Schüler“ eignet sich hierfür das Feld ID-Semester am besten. Um das Feld als Primärschlüssel zu kennzeichnen, wird es zunächst markiert (durch einen Klick auf die graue Fläche neben dem Feld) und dann die Schaltfläche mit dem Schlüssel gewählt. Dadurch erscheint bei den Argumenten unter “Indiziert“ automatisch Ja (OhneDuplikate), was bedeutet, dass jede Zahl nur einmal vorkommen darf, um die Eindeutigkeit zu gewährleisten. Das Abspeichern der Tabelle erfolgt beim Schließen. Die frage, ob Änderungen gespeichert werden sollen, wird mit Ja beantwortet und im nächsten Schritt wird ein Tabellenname vergeben, die in diesem Fall “Semester“ heißen soll. Zur Überprüfung, ob die Tabelle auch richtig angelegt wurde, empfiehlt es sich probeweise ein paar Daten einzugeben. Dafür ist die Datenblattansicht vorgesehen. Symbol für die Entwurfsansicht Symbol für die Datenblattansicht Bei der Dateneingabe darf in das Feld ID-Studierende nichts eingegeben werden, da die Vergabe der eindeutigen Nummer programmintern passiert. Hier ein paar Beispiele für die eingegebenen Daten: Semester 7E 5B Raum 1.Stock, 112 HP, 24 Schuljahr WS 04/05 SS 04 Im Datenblattfenster können die erfassten Daten in Listenform angezeigt und auch ausgedruckt werden. Das Drucken läuft über das Druckmenü. In der Seitenansicht lässt sich das Layout überprüfen. Sollten bestimmte Spalten nicht angezeigt werden (z.B. die automatische Nummerierung), dann lassen sich diese ganz einfach ausblenden. Hierfür wird der Cursor in die auszublendende Spalte gesetzt und im Formatmenü (oder im Kontextmenü) der Befehl “Spalten ausblenden“ gewählt. Durch den Befehl “Spalten einblenden“ können ausgeblendete Spalten wieder sichtbar gemacht werden. Die gewünschten Spalten werden dabei in einem Auswahlfenster ausgewählt. Nachdem die Funktionsfähigkeit der Tabelle “Semester“ überprüft wurde, sollen nun noch die Tabellen “Studierende“ und “Noten“ angelegt werden. Hierfür sind folgende Felder erforderlich: TABELLE STUDIERENDE Feldname ID-Semester Felddatentyp Zahl ID-Studierende Vorname Nachname Straße+Hausnummer PLZ AutoWert Text Text Text Zahl Wohnort Ländercode Text Nachschlageassistent Telefonnummer1 Telefonnummer2 E-Mail Text Text Text Argument Feldgröße: Long Integer Standardwert: keiner Feldgröße: 50 Feldgröße: 50 Feldgröße: 50 Feldgröße: Long Integer Format: Allgemeine Zahl Dezimalstellenanzeige: 0 Feldgröße: 50 “Werte werden selbst eingegeben“ auswählen 1 Spalte (A/D/CH) Beschriftung: Ländercode Feldgröße: 50 Feldgröße: 50 Feldgröße: 50 7 Geburtsdatum Datum/Uhrzeit Format: Datum, kurz Wichtig bei der Tabelle “Studierende“ ist, dass die Voraussetzungen für die spätere Verbindbarkeit mit der Tabelle “Semester“ gegeben sind. Um zwei Tabellen verbinden zu können, muss das Primärschlüsselfeld der einen Tabelle in der anderen Tabelle ebenfalls aufscheinen. Hier muss es immer als Zahl mit der Feldgröße Long Integer aufscheinen. Außerdem muss darauf geachtet werden, dass der Standardwert, der bei Zahlenfeldern immer von Haus aus auf Null gesetzt ist, gelöscht wird. Außerdem soll auch die Tabelle “Studierende“ ein eindeutiges Feld erhalten, damit später die Verbindung zur Tabelle “Noten“ ermöglicht wird. Nach Festlegung der Datenfelder wird also das Feld “ID-Studierende“ als Primärschlüsselfeld festgelegt, indem es wieder mit dem Schlüssel versehen wird. Beim Nachschlageassistenten, der hier für den Ländercode eingesetzt wurde, gibt es zwei Möglichkeiten: Entweder man bezieht die Daten, die zur Auswahl stehen sollen, aus einer bereits vorliegenden Tabelle bzw. Abfrage oder man gibt die Werte selbst ein. Im Register “Nachschlagen“ kann u.a. die Spaltenbreite variiert werden sowie die Einschränkung eingestellt werden, dass nur Listeneinträge ausgewählt werden dürfen (das Argument “Nur Listeneinträge“ wird dann auf Ja gestellt). TABELLE NOTEN Feldname ID-Studierende Felddatentyp Zahl Note Access Zahl Note Programmieren Zahl Note Theorie Zahl Argument Feldgröße: Long Integer Standardwert: keiner Indiziert: Ja (Duplikate möglich) Feldgröße: Byte Format: Allgemeine Zahl Gültigkeitsregel: <6 Und >0 Oder Ist Null Gültigkeitsmeldung: Note zwischen 1 und 5 Feldgröße: Byte Format: Allgemeine Zahl Feldgröße: Byte Format: Allgemeine Zahl In der Tabelle “Noten“ ist kein Primärschlüsselfeld mehr notwendig. Allerdings muss das Primärschlüsselfeld der Tabelle “Studierende“ wieder als Zahlenfeld aufscheinen, um eine Verbindung der beiden Tabellen zu ermöglichen. Die Indizierung mit Ja (Duplikate möglich) gewährleistet, dass jeder Studierende mehrere Noten haben kann. Durch die Gültigkeitsregel bei den Noten können Fehleingaben vermieden werden, da die Noten ja nur zwischen 1 und 5 liegen können. Eine beigefügte Gültigkeitsmeldung kreiert bei Fehleingaben ein Informationsfenster, welches auf die falsche Eingabe hinweist. Beim Abspeichern der Tabelle “Noten“ meldet Access, dass kein Primärschlüsselfeld vergeben wurde. Auf die Frage, ob ein solches erstellt werden soll, antwortet man in diesem Fall mit Nein, denn ansonsten würde Access automatisch ein indiziertes Zählerfeld der Tabelle hinzufügen. 4. Verbinden von Tabellen Im Anschluss an das Anlegen der einzelnen Tabellen, sollen diese nun miteinander in Beziehung gebracht werden. Diese Beziehungen können durch den Befehl EXTRAS – BEZIEHUNGEN oder durch einen Klick auf folgenden Icon hergestellt werden: Symbol für die Herstellung von Beziehungen Im Beziehungsfenster werden nun nacheinander alle Tabellen hinzugefügt. 8 Um nun eine Beziehung zwischen den Tabellen “Semester“ und “Studierende“ herzustellen, wird das Feld “ID-Semester“ aus der Tabelle “Semester“ angeklickt und mit gedrückter Maustaste auf das Feld “IDSemester“ in der Tabelle “Studierende“ gezogen. Im daraufhin erscheinenden Auswahlfenster scheint der Beziehungstyp auf – in diesem Fall handelt es sich um eine 1:n-Beziehung. Es sollte außerdem die Option “Mit referentieller Integrität“ ausgewählt werden. Die Verbindung wird schließlich mit der Schaltfläche Erstellen hergestellt. Derselbe Vorgang wird im Anschluss mit den Feldern “ID-Studierende“ aus der Tabelle “Studierende“ und der Tabelle “Noten“ durchgeführt. In beiden Fällen handelt es sich um eine sog. 1:n-Beziehung (oder 1:-Beziehung). Dabei werden einem Datensatz in der Ursprungstabelle (= Mastertabelle) mehrere Datensätze in einer untergeordneten Tabelle (= Detailtabelle) zugeordnet (z.B. ein Semester hat mehrere Studierende und ein Studierender hat mehrere Noten), während ein Datensatz der Detailtabelle aber immer genau einem Datensatz in der Mastertabelle entspricht. Pro Tabelle muss hierfür ein eindeutiges Feld, also ein Primärschlüsselfeld existieren. Dieses eindeutige Feld der Mastertabelle muss dann auch in der untergeordneten Tabelle wieder aufscheinen. Neben der 1:n-Beziehung gibt es noch 1:1-Beziehungen und m:n-Beziehungen. In der 1:1-Beziehung entspricht ein Datensatz der Ursprungstabelle genau einem Datensatz der Detailtabelle. Diese Beziehung ist in der Praxis eher selten, da ja die Informationen der beiden Tabellen auch in einer Tabelle vereint werden könnten. Um eine solche Beziehung herzustellen, muss das Primärschlüsselfeld der übergeordneten Tabelle auch gleichzeitig als Primärschlüsselfeld in der Detailtabelle definiert sein. Bei der m:n-Beziehung besitzt ein Datensatz aus der übergeordneten Tabelle mehrere Datensätze in der untergeordneten Tabelle, aber auch umgekehrt ein Datensatz aus der Detailtabelle mehrere Datensätze in der Mastertabelle. So kann z.B. ein Studierender mehrere Lehrer haben, umgekehrt unterrichtet aber auch jeder Lehrer mehrere Studierende. Solche m:n-Beziehungen lassen sich nur durch das Zwischenschalten einer dritten Tabelle lösen, wobei das Beziehungsschema hier so aussehen könnte: 9 Die referentielle Integrität stellt sicher, dass die Beziehungen zwischen Datensätzen aus verschiedenen Tabellen ihre Gültigkeit bewahren. So wird verhindert, dass es z.B. durch einen Löschvorgang zu einer Dateninkonsistenz kommt. Es können durch die referentielle Integrität nicht einfach Datensätze aus der Mastertabelle gelöscht werden, wenn diese mit weiteren Datensätzen in einer untergeordneten Tabelle verknüpft sind. Besteht eine referentielle Integrität, müssen außerdem zuerst Datensätze in der Ursprungstabelle angelegt werden, bevor in der untergeordneten Tabelle ein entsprechender Datensatz eingegeben werden kann. In dem vorliegenden Beispiel heißt das, dass es zuerst die Semester geben muss, bevor Studierende angelegt werden können. Bei den Verknüpfungstypen sind unterschiedliche Einstellungen möglich: Bei der Verknüpfungseigenschaft vom Typ 1 handelt es sich um eine Gleichheitsverknüpfung oder Exklusionsverknüpfung (Inner Join), d.h. die Daten werden nur dann angezeigt, wenn auch in jeder Tabelle Daten vorhanden sind. Die Typen 2 und 3 sind sog. Inklusionsverknüpfungen, und zwar einmal eine Links-Inklusionsverknüpfung (Left Outer Join) und einmal eine Rechts-Inklusionsverknüpfung (Right Outer Join). Beim Typ 2 würde das also heißen, dass alle Semester angezeigt werden, auch wenn dazu noch gar keine Studierenden angelegt sind. In Abfragen können die Beziehungen bzw. Verknüpfungseigenschaften zwischen einzelnen Tabellen verändert werden. 5. Arbeiten mit Tabellen Um mit den angelegten Tabellen arbeiten zu können, sind Daten notwendig. Verwenden Sie daher für die folgenden Aufgaben die bereits mit Daten “gefütterte“ Datenbank Übung.mdb. 5.1. Datensätze sortieren Soll eine Tabelle (z.B. die Tabelle “Studierende“) nach einer Spalte sortiert werden (etwa nach der PLZ), so setzt man den Cursor irgendwo in die entsprechende Spalte und wählt den Befehl DATENSÄTZE – SORTIEREN. Es gibt allerdings auch in der Symbolleiste entsprechende Symbole, die eine auf- oder absteigende Sortierung ermöglichen bzw. auch über das Kontextmenü lässt sich der Befehl ausführen. Mehrstufiges Sortieren (also zuerst nach der PLZ und dann nach dem Geburtsdatum) ist nicht möglich. Dies lässt sich nur durch eine Abfrage bewerkstelligen. Symbol für die auf- bzw. absteigende Sortierung Normalerweise befinden sich die Datensätze in der Tabelle in der Reihenfolge, in der sie eingegeben wurden. Wird eine Sortierung durchgeführt und dann die Tabelle wieder geschlossen, fragt Access, ob die Änderungen gespeichert werden sollen. Wird mit Ja geantwortet, werden beim nächsten Öffnen die Daten wieder sortiert angezeigt. 10 5.2. Datensätze filtern Um sich eine Teilmenge der gesamten Datenmenge anzeigen zu lassen, die alle ein bestimmtes Kriterium erfüllen, kann ein Filter verwendet werden. Möchte man sich z.B. eine Zusammenstellung aller Studierenden aus Deutschland anzeigen lassen, klickt man irgendwo in das Datenfeld mit dem Länderkennzeichen D und wählt dann DATENSÄTZE – FILTER – AUSWAHLBASIERTER FILTER. Das Filterkriterium beruht dabei auf dem momentan ausgewählten Wert (nämlich D). Schneller geht es mit dem Filtersymbol aus der Symbolleiste oder über das Kontextmenü. Möchte man sich wieder alle Datensätze anzeigen lassen, klickt man auf das Symbol Filter entfernen. Symbol für die Anwendung des auswahlbasierten Filters Symbol für die Entfernung des Filtes 5.3. Datensätze suchen Braucht man z.B. die Telefonnummer eines bestimmten Studierenden, wählt man BEARBEITEN – SUCHEN oder klickt auf das entsprechende Symbol. Außerdem kann auch die Tastenkombination STRG + F (für Finden) verwendet werden. Symbol für die Datensatzsuche Im darauf erscheinenden Dialogfeld wird dann der Suchtext eingegeben, z.B. Maier. Außerdem muss noch festgelegt werden, wo Access suchen soll (angeboten wird das Feld, in dem der Cursor gerade steht oder die ganze Tabelle) und was mit dem Suchtext verglichen werden soll (ein Teil des Feldinhaltes, der ganze Feldinhalt oder der Anfang des Feldinhaltes). Bei der Suche nach dem ganzen Feld muss der vollständige Inhalt des Feldes als Suchtext eingegeben werden. Schließlich ist noch die Richtung zu definieren, in welche gesucht werden soll – man wählt zwischen Aufwärts, Abwärts und Alle. Sind die Suchoptionen richtig eingegeben worden, wird der gesuchte Datensatz markiert. 6. Abfragen 6.1. Einfache Auswahlabfragen Sollen Daten einer oder mehrerer Tabellen ermittelt und ausgewertet werden, dann wendet man hierfür Auswahlabfragen an. Mit Abfragen lassen sich quasi Informationen aus einer Datenbank “herausfiltern“, wobei – anders wie bei herkömmlichen Filtern – die Daten mehrere Tabellen nach verschiedenen Kriterien geordnet werden können. Um eine Abfrage zu erstellen, aktiviert man im Datenbankfenster das Objekt Abfrage, klickt dann auf den Icon NEU und wählt ENTWURFSANSICHT aus. Man kann aber auch direkt die Rubrik Erstellt eine neu Abfrage in der Entwurfsansicht wählen. Aus dem Auswahlfenster “Tabelle anzeigen“ werden die benötigten Tabellen der Abfrage hinzugefügt. 11 Will man eine übersichtliche Darstellung der Studierenden, ihrer Wohnorte und der Semester, denen sie angehören, schaffen, dann fügt man sowohl die Tabelle “Studierende“ als auch die Tabelle “Semester“ der Abfrage hinzu. Um die benötigten Felder in den Abfragebereicht zu bekommen, werden diese nacheinander mit der Maus in die entsprechenden Abfragefelder gezogen. Der Mauszeiger verwandelt sich dabei in ein Feld. Man sollte bei der Auswahl der Abfragefelder auch schon deren Reihenfolge mit berücksichtigen, denn die Sortieranweisungen, die im Anschluss definiert werden, werden vom Programm immer von links nach rechts abgearbeitet. Sollte die Reihenfolge einmal nicht stimmen, kann ein Feld im Abfrageentwurf auch noch nachträglich verschoben werden. Hierfür markiert man das zu verschiebende Feld und zieht es wieder mit der Maus an die gewünschte Stelle. Außerdem können Felder auch wieder aus dem Abfragebereich gelöscht werden, indem man sie wiederum markiert und dann mit ENTF aus dem Abfrageentwurf eliminiert. Die für die Abfrage benötigten Felder, können aber auch durch einen Doppelklick der Abfrage angefügt werden, wobei das entsprechende Feld immer an die letzte Position gesetzt wird. In dieser Abfrage sollen nun die Studierenden (in alphabetischer Reihenfolge) nach ihren Wohnorten (ebenfalls alphabetisch sortiert) aufgelistet werden. Der Abfrageentwurf müsste dann folgendes Aussehen haben: Die Abfrage wird durchgeführt, indem man in die Datenblattansicht wechselt oder das Symbol für Ausführen anklickt. Symbol für das Ausführen der Abfrage 12 Das erhaltene Ergebnis ist wahrscheinlich nicht zufrieden stellend, denn es sollte eigentlich als oberstes Ordnungskriterium der Wohnort definiert werden. Möchte man sich allerdings zuerst trotzdem die Namen der Studierenden anzeigen lassen, bietet sich folgende Lösungsmöglichkeit an: Man kann also ein Feld in der Abfrage wiederholen, um das richtige Ordnungskriterium zu erhalten, wobei dieses Feld einmal unsichtbar gemacht wird (das Häckchen bei “Anzeigen“ wird dabei einfach deaktiviert). Das Ergebnis sieht dann wie folgt aus: Abfragen lassen sich natürlich für eine spätere Verwendung speichern. Beim Schließen des Abfragefensters wird man aufgefordert, einen Speichername für diese Abfrage zu vergeben. Wird die Datenbank in der Zwischenzeit mit weiteren Daten komplettiert, dann werden beim erneuten Durchführen der gespeicherten Abfrage die neuen Daten natürlich mitberücksichtigt. Die obige Abfrage wurde unter dem Namen “Studierende nach Wohnort sortiert“ abgespeichert. Unten im Fenster sind bei Abfragen immer sog. Navigationsschaltflächen eingeblendet, mit denen man durch das Ergebnis der Abfrage blättern kann. Von links nach rechts kommt den Symbolen folgende Bedeutung zu: zum ersten Datensatz einen Datensatz zurück einen Datensatz vor zum letzten (hier 6.) Datensatz 13 zum ersten leeren Datensatz, wo neue Datensätze angelegt werden können, welche dann auch sofort in die zugrunde liegende Tabelle eingetragen werden. 6.2. Anwendung spezieller Abfragekriterien Möchte man sich nun z.B. nur die Studierenden aus Salzburg, alphabetisch geordnet nach dem Nachnamen anzeigen lassen, gibt man bei “Wohnort“ als Kriterium “Salzburg“ an. Gibt man noch ein zweites Kriterium in der Zeile “oder“ an (z.B. “Hallein“), dann wird nach Studierenden aus Salzburg oder Hallein gesucht. Um sie nach ihren Wohnorten zu trennen, muss auch im Feld “Wohnort“ eine Sortierung ausgewählt werden. Kriterien, die untereinander stehen, sind ODER-Verknüpfungen. Eines der genannten Kriterien muss hier also zutreffen. Man kann aber auch UND-Verknüpfungen verwenden, wenn man die Kriterien nebeneinander platziert. Bei der Selektion von Datensätzen über Abfragen kann auch mit Platzhaltern gearbeitet werden. Möchte man sich alle Studierenden aus dem Bundesland Salzburg anzeigen lassen, kann man als Kriterium bei der PLZ “5*“ angeben. Der Platzhalter * steht für beliebig viele weitere Zeichen. In der korrekten Syntax steht bei Verwendung eines Platzhalters der einleitende Operator Wie, die darauf folgende Zeichenkette wird unter Abführungszeichen gesetzt. Das Ergebnis der Abfrage sähe dann folgendermaßen aus: Hier noch weitere Möglichkeiten der Datenselektion bei Abfragen: Verwendung von Platzhaltern: Neben dem * für beliebig viele Zeichen gibt es auch noch einen weiteren Platzhalter, der genau für ein Zeichen steht. Hierfür wird das Fragezeichen (?) verwendet, z.B. Wie “Ma?er“. Sucht man nach einer Person namens Maier oder Mayer und will nur diese beiden Schreibweisen zulassen, wird das Kriterium folgendermaßen definiert: Wie “ma[i;y]er“. Möchte man sich alle Nachnamen von A bis J anzeigen lassen, muss das Kriterium Wie “[a-j]*“ lauten. Platzhalter wie diese können natürlich auch bei Zahlen eingesetzt werden. Braucht man eine Auflistung aller Studierenden, die im Jahr 1979 geboren wurden, kann beim Geburtsdatum folgendes Kriterium eingegeben werden: Wie “*.*.1979“ Logisches Gegenteil: Will man alle Studierenden aufgelistet haben, außer diejenigen aus Salzburg, dann müsste Nicht Wie “Salzburg“ als Kriterium im Feld “Wohnort“ bei der Abfrage eingegeben werden. Der Operator Nicht steht also für das logische Gegenteil. Numerische Vergleiche: Zahlen- und Währungsfelder lassen sich über arithmetische Operatoren selektieren. = > >= gleich größer größer oder gleich < <= <> kleiner kleiner oder gleich ungleich 14 Sucht man in einem bestimmten Intervall, dann kann folgende Schreibweise eingesetzt werden: Zwischen … Und … Vergleich mit einer Liste: Will man den Inhalt eines Feldes nicht nur mit einem Wert, sondern dem Inhalt einer ganzen Liste vergleichen (z.B. um Studierende aus Bad Reichenhall, Freilassing und Berchtesgaden herauszufiltern), wird als Operator In (“Bad Reichenhall“;“Freilassing“; “Berchtesgaden“) eingegeben. Datum als Kriterium: Wird nach dem Datum selektiert, sollte dieses zwischen zwei Doppelkreuze geschrieben werden. So liefert der Eintrag <#01.01.1955# im Feld “Geburtsdatum“ alle Personen, die über 50 Jahre alt sind. Berechnete Felder: Man kann z.B. mit den Daten eines Datensatzes eine horizontale Berechnung durchführen, genauso wie auch vertikale Berechnungen innerhalb eines Feldes möglich sind. Das Ergebnis wird bei vertikalen Berechnungen als berechnetes Feld (oder auch virtuelles Feld) bezeichnet, weil es nicht Bestandteil der Tabelle ist, sondern nur in der Abfrage existiert. Bei vertikalen Berechnungen entstehen sog. aggregierte Felder. 7. Erstellen von Eingabeformularen 7.1. Eingabeformulare mittels Auswahlabfragen erstellen Damit nun die Semester sowie die Studierenden bequem eingegeben werden können, wird ein Eingabeformular erstellt, welches aus einem Hauptformular (zur Eingabe der Semester) und einem Unterformular (zur Eingabe der Studierenden) bestehen soll. Dabei sollen die Semester sortiert sein, d.h. zunächst sollen die Semester des aktuellen Schuljahres aufscheinen (das Schuljahr wird also absteigend sortiert). Im jeweiligen Schuljahr sollen die Semester aufsteigend aufscheinen (d.h. die unteren Semester kommen zuerst). Formulare können zwar auch unmittelbar auf der Basis von Tabellen erstellt werden, was allerdings den Nachteil hat, dass immer alle Daten aufscheinen und zwar unsortiert. Erstellt man Formulare aus Abfragen, ergeben sich folgende Vorteile: Daten aus zwei oder mehr Tabellen können zusammengeführt werden Datensätze lassen sich mehrstufig sortieren Daten lassen sich so selektieren, dass nur die gewünschten Datensätze angezeigt werden Berechnete Felder können für das Formular bereitgestellt werden Daten lassen sich mittels Parameterabfragen dynamisch selektieren Da es sich hierbei also in diesem Fall um zwei miteinander kombinierte Formulare handelt, werden zur Erstellung zwei Auswahlabfragen benötigt. Zuerst wird aus der Tabelle “Semester“ eine Abfrage mit sämtlichen in der Tabelle vorhandenen Feldern erstellt. Das Feld “ID-Semester“ wird in diesem Fall genauso benötigt, da bei der späteren Eingabe der Studierenden eine Zuordnung zu den einzelnen Semestern möglich sein muss. Begonnen wird in dieser Abfrage mit dem Feld “Schuljahr“, gefolgt vom Feld “Semester“, da ja zuerst nach dem Schuljahr und dann erst nach den Semestern sortiert werden soll. Bei den Sortierungen wird bei “Schuljahr“ absteigend und bei “Semester“ aufsteigend gewählt. Die Abfrage wird unter dem Namen “Semester sortiert“ abgespeichert. Zur Überprüfung können in die Tabelle “Semester“ ein paar Datensätze eingegeben werden. Dann öffnet man die Abfrage. Weiters sollen alle Studierende eines Semesters sortiert werden. Dazu erstellt man mit der Tabelle “Studierende“ eine Abfrage (“Studierende sortiert“), wobei der Nachname aufsteigend sortiert erscheinen soll. Auf keinen Fall darf man auf das Feld “ID-Semester“ vergessen, da über dieses Feld die Daten synchronisiert werden. Nur wenn die Schlüsselfelder Bestandteil beider Abfragen sind, kann Access die zusammengehörigen Datensätze Im Haupt-/Unterformular zusammenführen. Zum Schluss wird nun das Eingabeformular erstellt, das nach der Fertigstellung es folgendes Aussehen haben wird: 15 Im Datenbankobjekt Formulare wird der Formularassistent über die Rubrik Erstellt ein Formular unter Verwendung des Assistenten oder über den Befehl NEU – FORMULARASSISTENT aufgerufen. Zuerst sollen die Daten für das Hauptformular bereitgestellt werden, welche sich in der Abfrage “Semester sortiert“ befinden. Es wird also als erstes diese Abfrage ausgewählt. Aus den verfügbaren Feldern, die nach Auswahl der Tabelle bzw. Abfrage erscheinen, wählt man nach der Reihe diejenigen aus, die im Eingabeformular auftauchen sollen. Da die Werte für das Feld “ID-Semester“ automatisch vergeben werden, braucht es für das Formular natürlich nicht ausgewählt werden. Weiters wählt man noch die Felder für das Unterformular aus, die aus der Abfrage “Studierende sortiert“ stammen. Auch hier werden die ID-Felder nicht benötigt. 16 Im nächsten Dialogfeld entscheidet man, wie die Daten angezeigt werden sollen. Es wird nach Semestern sortiert und die Option Formular mit Unterformular(en) gewählt. In den folgenden Dialogfeldern geht es um das Layout des Eingabeformulars. Aus den verschiedenen Möglichkeiten wird tabellarisch gewählt. Außerdem wird noch der Stil ausgesucht, z.B. Standard. Schließlich werden noch Speichernamen sowohl für das Haupt- als auch für das Unterformular vergeben (“Semestereingabe“ und “Semestereingabe Unterformular“). Klickt man auf Fertigstellen erstellt der Assistent das Formular und öffnet es in der Formularansicht. Nun können sowohl Semester eingegeben werden sowie zu den einzelnen Semestern Studierende angelegt werden. Sieht man sich das Ergebnis in der Tabelle “Studierende“ an, fallen die vom Programm automatisch nummerierten Zähler “ID-Semester“ und “ID-Studierende“ auf. Möchte man das Aussehen des Formulars verändern, so ist dies in der Entwurfsansicht des Formulars möglich. Genauere Informationen zur Gestaltung eines Formulars werden später noch genauer erläutert. Vorweg sei nur soviel gesagt: Damit immer nur ein Datensatz im Unterformular angezeigt wird, muss der Formularmarkierer des Unterformulars (Quadrat in der oberen linken Ecke auf dem gedachten Schnittpunkt der Lineale) doppelt angeklickt und bei den Formulareigenschaften im Register FORMAT beim Punkt Standardansicht der Item Einzelnes Formular ausgewählt werden. 7.2. Eingabeformulare mittels Parameterabfragen erstellen Auf ähnliche Art und Weise soll nun weiters ein Formular für die Noteingabe kreiert werden. Es soll sich dabei um ein Formular handeln, bei dem schon automatisch die Studierenden eines Semesters aufgelistet werden. Hierfür ist eine sog. Parameterabfrage notwendig. Wieder öffnet man eine neue Abfrage in der Entwurfsansicht und fügt die Tabellen “Semester“ und “Studierende“ hinzu. Aus der Tabelle “Semester“ benötigt man die Felder “Semester“, “Schuljahr“ und “ID17 Semester“. Aus der Tabelle “Studierende“ werden die Felder “Nachname“, “Vorname“ und “ID-Studierende“ ausgewählt. Im Nachnamensfeld wird die aufsteigende Sortierung eingestellt. Sowohl das Semester als auch das Schuljahr sollen von Benutzer frei wählbar sein. Dazu schreibt man in die Kriterienzeile des Feldes “Semester“ Wie[Semester]. Das Kriterium für das Feld “Schuljahr“ muss Wie[Schuljahr] heißen. Bei dem in der eckigen Klammer stehenden Ausdruck handelt es sich um die Variable, den sog. Parameter, der bei der Eingabe als Text aufscheint. Man könnte auch längere Texte als Parameter wählen, z.B. Wie[Bitte Semester eingeben] oder Wie[Bitte Schuljahr eingeben]. Die Parametertexte können sich dabei, wie man sieht, von den Feldnamen unterscheiden. Wenn der Parameter einem Feldnamen entspricht, muss dieser extra angemeldet werden. Dies passiert im Menü ABFRAGE – PARAMETER. Hier müssen dann die Parameter “Semester“ und “Schuljahr“ eingegeben werden. Diese Parameterabfrage soll unter dem Namen “Semesterauswahl“ abgespeichert werden. Mit der Abfrage “Semesterauswahl“ als Hauptformular und der Tabelle “Noten“ als Unterformular soll nun das Eingabeformular für die Noten zusammengestellt werden. Gespeichert werden dann das Hauptformular unter dem Namen “Noteneingabe“ und das Unterformular und dem Namen “Noteneingabe Unterformular“. Eingabe des 1. Parameters Eingabe des 2. Parameters Damit im Noteneingabeformular nicht ein neues Semester bzw. ein neues Schuljahr eingegeben werden kann, können diese Felder gesperrt werden. Dies wird in der Entwurfsansicht bewerkstelligt, indem man das Feld “Semester“ mit der rechten Maustaste anklickt und aus dem Kontextmenü die Eigenschaften wählt. Um zu vermeiden, dass der Benutzer im Notenformular neue Studierende anlegt, wird in der Entwurfsansicht der Formularmarkierer des Hauptformulars doppelt angeklickt und bei den Formulareigenschaften im Register ALLE der Punkt Anfügen zulassen auf Nein gesetzt. 18 8. Datenauswertung Nicht nur zur Erstellung von Formularen, sondern auch zur Auswertung von Daten sind Abfragen gut geeignet. Beispiel 1: Es soll der Notendurchschnitt aus den drei eingetragenen Noten der Tabelle “Noten“ berechnet werden. Zu bewerkstelligen ist dies durch einen spezifischen Eintrag in einem zusätzlichen, leeren Abfragefeld. Es handelt sich dabei um eine horizontale Berechnung von einzelnen Datensätzen. Aus der Tabelle “Studierende“ und der Tabelle “Noten“ wird eine neue Abfrage zusammengestellt, die man dann unter dem Namen “Berechnung Gesamtnote“ abspeichert. Benötigt werden die Felder Vorname und Nachname aus der Tabelle “Studierende“ sowie aus der Tabelle “Noten“ die Teilnoten aus Access, Programmieren und Theorie. In das erste freie Feld des Abfrageentwurfs wird folgender Eintrag geschrieben: Gesamtnote: ([Note Access]+[Note Programmieren]+[Note Theorie])/3. Ein Feld wird angesprochen, indem der Feldname in eckige Klammern gesetzt wird, also [Feldname]. Durch die runden Klammern wird die mathematische Rechenabfolge festgesetzt. Der neue Feldname, der nur in der Abfrage existiert, wird vorangesetzt und mit einem Doppelpunkt vom Berechnungsausdruck getrennt. Beim Ausführen der Abfrage erscheint dann ein zusätzliches Feld mit dem Titel “Gesamtnote“, in dem die berechneten Felder aufgelistet sind. Beispiel 2: Es soll der Mittelwert der einzelnen Teilnoten ausgerechnet werden, was über eine vertikale Berechnung passiert. Man erstellt eine neue Abfrage unter Zuhilfenahme der Tabelle “Noten“. Im Abfragebereich benötigt man die Felder “Note Access“, “Note Programmieren“ und “Note Theorie“. Anschließend wird in der Entwurfansicht das Summensymbol angeklickt, woraufhin in jedem Feld eine zusätzliche Zeile Funktion eingeblendet wird. Aus der Drop-Down-Liste wird dann die Funktion Mittelwert ausgewählt. Als Kriterium kann bei allen drei Feldern >0 eingegeben werden, damit nur die Felder in der Berechnung berücksichtigt werden, wo es auch wirklich Einträge gibt. Führt man dann die Abfrage durch, wird aus den einzelnen Noten der Mittelwert berechnet. Beispiel 3: 19 Um Studierende über fehlende Leistungsfeststellungsprüfungen informieren zu können, können mittels Abfrage aus der Datenbank jene Studierende herausgesucht werden, denen eine oder mehrere Teilnoten fehlen. Die Abfrage setzt sich aus allen drei Tabellen zusammen – ihr liegt folgender Entwurf zugrunde: Durch die Kriterien Ist Null werden jene Datensätze herausgefiltert, in denen keine Noten in den jeweiligen Teilbereichen eingetragen sind. Werden die Kriterien im Abfragentwurf untereinander angeführt, so sind sie über eine Oder-Verknüpfung verbunden. Hat also ein Studierender entweder keine Note in Access oder keine Note im Programmieren oder keine Theorienote, dann wird er bei dieser Abfrage “erwischt“. 9. Berichte Man kann zwar Tabellen und Abfragen direkt ausdrucken, viel wirkungsvoller werden die Daten aber in Berichten angezeigt und zusammengefasst, wobei ein Bericht Daten aus mehreren Abfragen und Tabellen enthalten kann. Es soll beispielsweise eine übersichtliche Darstellung aller Semester eines Schuljahres samt dazugehörigen Studierenden und deren Noten verfasst werden. Zur Einschränkung des Schuljahres bietet sich eine Parameterabfrage an. Hierfür wird lediglich die Tabelle “Semester“ benötigt und von dieser die Felder “Schuljahr“, “Semester“ und “ID-Semester“. Für das Feld “Schuljahr“ wird ein entsprechender Parameter gesetzt. Aus dieser Abfrage mit dem Titel “Auswahl Schuljahr“ sowie den Tabellen “Studierende“ und “Noten“ soll sich nun der Bericht zusammensetzen. 1. Im Datenbankobjekt Berichte wird ein neuer Bericht mit Hilfe des Assistenten erstellt. 2. Man wählt aus der zuvor erstellten Abfrage das Feld “Semester“ aus, fügt dann noch aus der Tabelle “Studierende“ den Nach- sowie den Vornamen hinzu und zum Schluss wählt man aus der Tabelle “Noten“ die Noten aus Access, Programmieren und Theorie. 3. Im folgenden Auswahlfenster, wo nach dem gewünschten Aussehen gefragt wird, wird “nach Noten“ gewählt. Dadurch hat man im darauf folgenden Schritt die Möglichkeit, selbst eine Gruppierung vorzunehmen. 20 4. Im nächsten Auswahlfenster kann man eine Gruppierung vornehmen. In diesem Beispiel sollen die Studierenden nach Semestern geordnet werden, also fügt man “Semester“ als Gruppierungsebene hinzu. 5. Als nächstes gibt es die Möglichkeit, eine Sortierung durchzuführen – es wird der Nachname in der aufsteigenden Sortierung eingegeben. 6. Weiters wird das Layout festgelegt – es wird Abgestuft und Querformat eingestellt. 7. Außerdem kann noch ein Format gewählt werden. Im Vorschaufenster wird das Format des Berichtes angedeutet. 8. Zum Abschluss wird noch ein Speichername für den Bericht eingegeben, z.B. “Übersicht Studierende + Noten“. In der Entwurfsansicht kann der Bericht dann noch optisch aufbereitet werden. Man könnte z.B. bei der Erstellung des Berichts das Feld "Schuljahr" aus der Abfrage "Auswahl Schuljahr" mitberücksichtigen und dann im Bericht in die Kopfzeile verschieben, so dass das Blatt folgendes Aussehen hat: 21 10. Verknüpfte Formulare Neben der Möglichkeit Formulare mit Unterformularen zu erstellen, kann man auch Formulare miteinander verknüpfen. In diesem Fall werden zwar wieder zwei Formulare erstellt, allerdings wird das Unterformular nicht in das übergeordnete Formular eingefügt, sondern die Verbindung vom Hauptformular zum untergeordneten Formular erfolgt über eine Schaltfläche. Als Beispiel kann ein Formular erstellt werden, in dem alle Studierenden angezeigt werden, und durch einen Klick auf eine Schaltfläche kann man sich die Noten des jeweiligen Studierenden anzeigen lassen. Dieses Formular lässt sich auf der Basis der Tabellen "Studierende" und "Noten" anfertigen – man lässt sich auch dabei wieder vom Formularassistenten führen: Nachdem man die benötigten Felder aus den beiden Tabellen ausgewählt hat, wird im nächsten Schritt die Option Verknüpfte Formulare angeklickt. Zum Schluss müssen wieder zwei Speichernamen vergeben werden (z.B. "Notenübersicht" und "Notenübersicht Verknüpfungsformular"). Das 1.Formular sieht dann wie folgt aus, zur Notenübersicht gelangt man über den Button Noten anzeigen, der nachträglich im Formularentwurf so genannt wurde (standardmäßig erhält er den Namen, der dem verknüpften Formular gegeben wurde). 11. Spezialabfragen Neben den bereits vorgestellten Auswahl- und Parameterabfragen gibt es noch eine ganze Reihe weiterer Abfragetypen, die im Folgenden anhand von konkreten Beispielen vorgestellt werden. 22 11.1. Kreuztabellenabfragen Mit Hilfe von Kreuztabellen lassen sich vielfältige Informationen in einer kompakten Tabellenform anzeigen. Die Informationen werden dabei sowohl horizontal als auch vertikal gruppiert, so dass das Datenblatt kompakter und einfacher zu analysieren ist. Außerdem lassen sich bequem Berechnungen (z.B. Summen, Mittelwerte usw.) durchführen. Beispiel 1: Es soll die Anzahl der Studierenden in den jeweiligen Semestern nach Schuljahren geordnet angezeigt werden. Dabei geht man zuerst vor wie bei der Erstellung einer Auswahlabfrage. Man fügt der Abfrage die Tabellen "Semester" und "Studierende" hinzu und wählt die Felder "Schuljahr", "Semester" und "Nachname" aus. Dann öffnet man das Menü ABFRAGE und wählt dort den Menüpunkt KREUZTABELLENABFRAGE aus. Daraufhin erscheinen im Abfragebereich zu jedem Feld zwei zusätzliche Zeilen, nämlich Funktion und Kreuztabelle. Als nächstes sind in der Zeile Kreuztabelle die Zeilen- und Spaltenüberschriften zu definieren. Diese müssen immer die Funktion Gruppierung aufweisen. Danach wird der Wert bestimmt, dem eine Funktion zugewiesen wird. Das Schuljahr wird als Zeilenüberschrift gesetzt, das Semester als Spaltenüberschrift. Beim Nachnamen wird die Sortierung: Wert ausgewählt und die Funktion: Anzahl. Die Kreuztabellenabfrage wird unter dem Namen "Kreuztabelle Anzahl Studierende" abgespeichert. Beim Öffnen in der Datenblattansicht erhält man die gewünschte Darstellung. Beispiel 2: Möchte man sich die Durchschnittsnoten aller Studierenden nach Semestern geordnet ansehen, muss der Entwurf wie folgt aussehen: 23 Markiert man die 3.Spalte und klickt mit der rechten Maustaste darauf, kann man bei den Eigenschaften das FORMAT Festkommazahl einstellen, damit beim Notendurchschnitt nur zwei Kommastellen angegeben werden. Fertig gestellt erhält man folgenden Überblick: 11.2. Tabellenerstellungsabfragen Tabellenerstellungsabfragen dienen als Grundlagen für Berichte und Diagramme, zum Kopieren von Tabellen (um z.B. einen bestimmten Stand festzuhalten) sowie zur Erhöhung der Leistungsfähigkeit von Mehr-Tabellen-Formularen und -Berichten. Will man etwa die Daten der Studierenden in einer neuen Tabelle abspeichern, wird zunächst wieder eine Auswahlabfrage erstellt. Aus der Tabelle "Studierende" werden alle Felder in den Abfragebereich übernommen. Im Menü ABFRAGE wählt man dann den Menüpunkt TABELLENERSTELLUNGSABFRAGE aus. Es erscheint eine Dialogfenster, in dem der Name der neuen Tabelle eingegeben werden soll ("Studierendendaten alt"). Diese neue Tabelle soll in der aktuellen Datenbank erstellt werden. Man könnte sie allerdings auch in einer anderen Datenbank abspeichern. Schließt man die Abfrage, wird noch der Speichername für die Tabellenerstellungsabfrage vergeben ("Tabellenerstellung Studierendendaten alt"). Da es zu einer Änderung der Daten kommt, wird sofort folgende Warnung eingeblendet: Bestätigt man mit Ja, wurden alle Daten kopiert. Öffnet man nun die neue Tabelle, sieht man, dass alle Daten kopiert wurden. 11.3. Löschabfragen Mit Löschabfragen werden nicht einzelne Werte, sondern immer ganze Datensätze einer Tabelle gelöscht. Sind die zu löschenden Daten auf mehrere Tabellen verteilt, ergeben sich für Löschabfragen einige Einschränkungen: aus einer 1:n-Beziehung werden nur die Daten der n-Beziehung gelöscht ist die referentielle Integrität aktiviert, lassen sich Datensätze, zu denen untergeordnete Daten existieren, nicht ohne (ungewollten) Datenverlust löschen. Diese Probleme können jedoch umgangen werden, wie das folgende Beispiel zeigt: Es sollen alle Daten eines Studierenden gelöscht werden, und zwar nicht nur seine persönlichen Daten, sondern auch seine Noten. Eine Löschabfrage wird anfangs wieder wie eine Auswahlabfrage erstellt. Dazu benötigt man aus der Tabelle "Studierende" die Felder "Nachname" und "Vorname". Diesen kann man als Parameter definieren. Falls nur [Nachname] und [Vorname] als Kriterien verwendet werden, müssen diese angemeldet werden. Danach wird aus dem Menü ABFRAGE der Punkt LÖSCHABFRAGE ausgewählt, woraufhin die Zeile Löschen im Abfragebereich erscheint. 24 Die Abfrage kann nun abgespeichert werden, z.B. unter "Studierende löschen". Damit die Löschabfrage ohne Fehlermeldung ausgeführt wird, muss zuerst noch eine Veränderung an der Beziehung zwischen den Tabellen "Studierende" und "Noten" vorgenommen werden, denn man will ja, dass sämtliche Daten des Studierenden eliminiert werden. Im Beziehungsfenster klickt man deshalb die Verknüpfung zwischen den beiden genannten Tabellen doppelt an und aktiviert im erscheinenden Fenster die Auswahl Löschweitergabe an verwandte Datensätze. Will man nun die Löschabfrage durchführen, wird man wieder von Access gewarnt, dass durch die Abfrage Daten verändert werden. Bestätigt man mit Ja, und gibt die entsprechenden Parameter ein, wird der gewählte Studierende gelöscht, was man sofort in der Tabelle "Studierende" überprüfen kann. 11.4. Anfügeabfragen Anfügeabfragen fügen komplette Datensätze oder einzelne Felder in eine Tabelle ein, die sich in derselben oder in einer anderen Datenbank befindet. Will man z.B. Studierendendaten aus einer anderen Datenbank an die Tabelle "Studierende" der Schülerverwaltungsdatenbank anfügen, geht man wie folgt vor: Zuerst wird in einer neuen Datenbank eine Tabelle "Schüler" angelegt, die exakt die gleichen Felder beinhalten soll, wie die Tabelle "Studierende" – nur das Feld "ID-Studierende" ist nicht unbedingt nötig. Es ist darauf zu achten, dass die Felder wirklich identische Bezeichnungen haben, denn ansonsten werden sie bei Ausführung der Anfügeabfrage ignoriert. Als nächstes gibt man in diese Tabelle ein paar Datensätze ein. In der neuen Datenbank wird eine Auswahlabfrage erstellt (wieder mit allen Feldern der neuen Tabelle "Schüler"). Im Menü ABFRAGEN ist dann der Punkt ANFÜGEABFRAGE zu wählen, woraufhin ein Dialogfenster erscheint, in dem Datenbank und Tabellenname ausgewählt werden, wo die Anfügung stattfinden soll. 25 Wird dann die Anfügeabfrage gespeichert und neuerlich geöffnet (also ausgeführt), was natürlich in diesem Fall in der neuen Datenbank passieren muss, erfolgt im Hintergrund das Anfügen der Daten an die Schülerverwaltungsdatenbank, was sich in dieser dann leicht überprüfen lässt. 11.5. Aktualisierungsabfragen Mit Aktualisierungsabfragen lassen sich Feldinhalte ausgewählter Datensätze verändern. Angenommen die PLZ von Salzburg würde sich ändern und nunmehr 5000 lauten, dann könnte man alle Datensätze, in denen die alte PLZ vorkommt, mit einer einzigen Aktualisierungsabfrage auf den neuesten Stand bringen. Man stellt dafür wieder eine Auswahlabfrage zusammen, in der eigentlich nur die PLZ vorkommt. Dann wird aus dem Menü ABFRGAGE die AKTUALSIERUNGSABFRAGE ausgewählt. Als Kriterium gibt man den zu ändernden Wert ein, also in diesem Fall 5020. Natürlich kann das Kriterium auch in einem anderen Feld definiert werden. In der Zeile Aktualisieren ist der neue Wert zu festzusetzen, also 5000. Führt man dann die Abfrage durch, werden in der Tabelle "Studierende" die PLZ-Felder sämtliche Datensätze geändert, in denen die Salzburger PLZ vorkommt. Nachdem diese Änderungen natürlich unsinnig waren, können sie durch eine neue Aktualisierungsabfrage (Kriterium: 5000, Aktualisieren: 5020) rückgängig gemacht werden. 11.6. Abfragen über Abfragen Abfragen lassen sich nicht nur auf der Basis von Tabellen erstellen, sondern auch ausgehend von Abfragen. Möchte man z.B. wissen, wie viele Studierende Access mit einem Sehr gut abgeschlossen haben, dann ist zuerst eine Abfrage notwendig, in der alle Studierenden mit der Note Sehr gut in Access herausgefiltert werden. 26 In einer zweiten Abfrage, in der als Datenquelle nicht eine Tabelle, sondern aus dem Register Abfragen die zuvor erstellte gewählt wird, wird dann ermittelt, wie viele Studierende dieses Kriterium erfüllen. Damit die Anzahl an Datensätzen ermittelt werden kann, werden über das Summensymbol die Funktionen aufgerufen, und aus diesen wählt man dann die Funktion Anzahl aus. 12. Formulare manuell bearbeiten Mit dem Assistenten lassen sich zwar ganz passable Formulare (und auch Berichte) erstellen, häufig ist jedoch noch eine manuelle Nachbearbeitung notwendig. Das nachträgliche Verändern eines Formulars erfolgt immer in der Entwurfsansicht. 12.1. Bestandteile von Formularen Alle Objekte in einem Formular werden als Steuerelemente bezeichnet. Die Daten stehen in sog. Textfeldern, während die Beschriftung in Bezeichnungsfeldern steht. Ein Formular lässt sich in mehrere Bereiche unterteilen: Formularkopf: Er dient zum Anzeigen des Titels eines Formulars, für Anleitungen zu seiner Verwendung oder zur Darstellung von Befehlsschaltflächen, die andere Formulare öffnen oder andere Aufgaben erledigen. Wird ein Formular ausgedruckt, erscheint der Formularkopf nur auf der ersten Seite. Bei der Bildschirmanzeige erscheint er bei jeder Bildschirmseite. Seitenkopf: Er erscheint nur in gedruckten Formularen auf jeder Seite ganz oben (auf der ersten Seite unter dem Formularkopf). Im Prinzip hat der Seitenkopf dieselbe Funktion wie eine Kopfzeile in der Textverarbeitung. Detailbereich: Dieser Bereich enthält die Felder der entsprechenden Tabellen, dient also zur Anzeige der Datensätze. Seitenfuß: Das Gegenstück zum Seitenkopf wird auf jeder Seite unten ausgedruckt, entspricht also der Fußzeile. Formularfuß: Er erscheint beim gedruckten Formular nur auf der letzten Seite ganz am Ende. Bei der Bildschirmansicht erscheint der Formularfuß am Ende jedes Fensters. Zu jedem Objekt im Formular gehören mehrere Eigenschaften. Je komplexer das Objekt ist, desto mehr Eigenschaften besitzt es. Durch einen Doppelklick auf ein Objekt wird dessen Eigenschaftsfenster geöffnet. Das gesamte Formular besitzt insgesamt 107 Eigenschaften. Grundsätzlich stehen bei jedem Objekt folgende Eigenschaftsregister zur Verfügung: Format: Hier kann das Aussehen des Objekts (Hintergrund- und Textfarbe, Textgröße, Rahmenart, Größe usw.) verändert werden. 27 Feld kann unsichtbar gemacht werden werden diese Eigenschaften auf Ja gesetzt, wird es Access ermöglicht, den Bereich gegebenenfalls so groß bzw. so klein als nötig anzulegen. Daten: Hier werden alle wichtigen Eigenschaften in Bezug auf Daten aufgelistet, wie z.B. die Datenherkunft, der Steuerelementinhalt, die Länge, das Eingabeformat usw. Durch die Aktivierung der Eigenschaft Gesperrt, kann verhindert werden, dass der Benutzer in dieses Feld Daten eingibt. Ereignis: In diesem Register werden alle möglichen Ereignisse angeführt, bei denen Makros oder Access-Basic-Code ausgeführt werden. Andere: Die Eigenschaft Name legt den internen Namen des Objekts fest, unter dem das Objekt dann in einem Programmcode angesprochen wird. Ist die Eigenschaft PopUp auf Ja gesetzt, so ist dieses Formular immer im Vordergrund und wird nicht von anderen Fenstern überdeckt. Wird die Eigenschaft Gebunden auf Nein gesetzt, kann bei geöffnetem Formular auch auf andere Objekte der Datenbank (also Tabellen, Formulare usw.) zugegriffen werden. Erscheinen hinter einer Eigenschaft beim Anklicken drei Punkte, so steht ein weiteres Auswahlfenster zur Verfügung. Durch einen Pfeil lässt sich eine Auswahlliste öffnen. Werden Eigenschaften verändert, kann man die Ergebnisse immer gleich in der Formularansicht begutachten. 12.2. Arbeitstechniken 12.2.1. Raster einstellen Der Assistent verwendet bei der Ausrichtung von Steuerelementen ein Rasterverfahren. Ein solches Raster ist natürlich auch bei der manuellen Nachbearbeitung von Nutzen. Es lässt sich bei der Formulareigenschaft Format beliebig fein bzw. grob einstellen. Sowohl für die x- als auch für die y-Achse ist ein Wert von 10 voreingestellt. Das Gitternetz von 1 cm horizontal und 1 cm vertikal ist also in beiden Dimensionen zehnfach geteilt. Für die Praxis ist ein 2-mm-Raster ganz gut geeignet, was also bedeutet, dass der Wert auf 5 einzustellen wäre. 12.2.2. Steuerelemente verschieben Alle Steuerelemente lassen sich auf der Formularfläche beliebig verschieben. Allerdings sollten Bezeichnungs- und Textfeld dabei immer zusammenbleiben. Wird ein Textfeld mit der Maus angeklickt, erscheinen rundherum Markierungspunkte. Berührt man dann mit dem Mauszeiger den Rand, erscheint eine Hand mit fünf Fingern. Klickt man nun auf die Maus, kann man mit gedrückter Maustaste das Text- und das dazugehörige Bezeichnungsfeld gemeinsam verschieben. Erscheint bei der Berührung mit dem Mauszeiger eine Hand mit Zeigefinger und Daumen, kann durch Anklicken das Steuerelement separat verschoben werden. Sollen mehrere Objekte gleichzeitig umgruppiert werden, können sie hintereinander mit gedrückter Umschalttaste angeklickt und so markiert werden. Es lassen sich mehrere benachbarte Objekte auch durch das Aufziehen eines imaginären Rahmens (so wie das auch in anderen Programmen funktioniert) gemeinsam markieren. Will man alle Steuerelemente markieren, kann hierzu die Tastenkombination STRG+A verwendet werden. Will man eine Feineinstellung der Position von Steuerelementen vornehmen, so gelingt dies am besten durch Ziehen mit gedrückter STRG-Taste. 28 Die Größe von Steuerelementen lässt sich durch die Pfeiltasten in alle Richtungen vergrößern oder verkleinern. 13. Steuerelemente erstellen Grundsätzlich unterscheidet man drei Kategorien von Steuerelementen: Gebundene Steuerelemente: Sie sind mit einer Tabelle oder Abfrage verknüpft und werden eingesetzt, um den Inhalt von Feldern darzustellen. Bei gebundenen Steuerelementen lässt sich die Datenherkunft im Eigenschaftsregister Daten unter der Eigenschaft Steuerelementinhalt leicht nachvollziehen. Hier wird angegeben, aus welchem Feld die Daten stammen. Schaut man in den Formulareigenschaften unter Daten nach, kann man in der Eigenschaft Datenherkunft die zugrunde liegende Tabelle oder Abfrage eruieren. Ungebundene Steuerelemente: Diese sind weder mit einem Feld einer Tabelle noch einem Feld einer Abfrage verknüpft. Sie können für beliebige Informationen aber auch für Eingaben, die nicht gespeichert werden, genutzt werden. Z.B. könnte man im Semestereingabe-Formular ein Bezeichnungsfeld aufziehen, welches darauf hinweist, dass auf jeden Fall das Schuljahr und das Semester einzugeben sind. Es lässt sich übrigens jederzeit aus einem ungebundenen Steuerelement ein gebundenes machen. Dazu ist lediglich die Datenherkunft anzugeben. Berechnete Steuerelemente: Sie sind mit einer Berechnung verknüpft. Möchte man z.B. im Formularkopf das aktuelle Datum sehen, vergrößert man den Formularkopf, indem man mit der Maus zwischen Formularkopf und Detailbereich zeigt und dann, wenn aus dem Pfeil ein Doppelpfeil wird, mit gedrückter Maustaste die Trennlinie nach unten verschiebt. Mit Hilfe der Toolbox wird dann ein Textfeld aufgezogen, welches zunächst einmal als ungebundenes Steuerelement definiert ist. In den Eigenschaften dieses Textfeldes wird anschließend im Register Daten unter der Eigenschaft Steuerelementinhalt der Code =Datum() eingegeben. Wird das Formular dann in der Formularansicht geöffnet, sieht es wie folgt aus: 29 Der Ausdruck Datum() ist genauso wie der Ausdruck Zeit () oder Jetzt() eine vordefinierte VisualBasic-Funktion. 13.1. Steuerelemente hinzufügen mit der Feldliste Wird ein weiteres Feld im Formular benötigt, kann es aus der Tabelle oder Abfrage, die als Formularbasis gedient hat, hinzugefügt werden. Mit einem Klick auf das entsprechende Symbol lässt sich die Feldliste öffnen und daraus ein zusätzliches Feld auswählen. Symbol für das Anzeigen der Feldliste 13.2. Steuerelemente hinzufügen mit der Toolbox Es soll eine leeres Formular erstellt werden, das dann nach und nach mit Steuerelementen gefüllt wird. Das leere Formular erhält man, indem man im Bereich Formulare den Punkt Erstellt ein Formular in der Entwurfsansicht wählt oder über das Symbol NEU die Entwurfsansicht auswählt. Das neue Formular wird unter dem Namen "Information Studierende" gespeichert. Da nur der Detailbereich angezeigt wird, erweitert man das Formular am besten gleich mit dem Formularkopf/-fuß, der über das Menü ANSICHT eingeblendet werden kann. Falls die Toolbox nicht angezeigt werden sollte, kann diese mit Hilfe des Werkzeugsymbols eingeblendet werden. Symbol zum Aufrufen der Tollbox Hier ein kurzer Überblick über die einzelnen Symbole de Toolbox: Objekte markieren Steuerelement-Assistenten Bezeichnungsfeld Textfeld Optionsgruppe Optionsfeld Kombinationsfeld Befehlsschaltfläche Objektfeld Seitenumbruch Unterformular/Unterbericht Rechteck Umschaltfläche Kontrollkästchen Listenfeld Bild Gebundenes Objektfeld Registersteuerelement Linie Weitere Steuerelemente Als erstes sollen im Formularkopf zwei Bezeichnungsfelder aufgezogen werden, in die die Titel "Abendgymnasium Salzburg" und "Studierendeninformationen" eingetragen werden. Diese Steuerelemente können nach Belieben gestaltet werden (Hintergrundfarbe, Textfarbe, Textgröße, usw.). Im Detailbereich werden nun der Reihe nach die Textfelder für den Namen, die Anschrift, Telefonnummer, Mail-Adresse und das Geburtsdatum erstellt. Damit Access die Daten auch richtig verarbeiten kann, muss 30 die Datenherkunft geklärt werden. Nachdem alle Felder aus der Tabelle "Studierende" stammen, wird bei den Formulareigenschaften im Register Daten bei der Eigenschaft Datenherkunft die Tabelle "Studierende" ausgewählt. Erst wenn die Herkunft der Daten für das gesamte Formular definiert ist, können die Steuerelementinhalte der einzelnen Textfelder bestimmt werden. Würde dieser Schritt vor der Datenbereitstellung für das gesamte Formular erledigt werden, würde in der Formularansicht eine Fehlermeldung erscheinen. Hat man die Datenherkunft für das Formular bestimmt, kann man sich die Feldliste anzeigen lassen, und aus der Feldliste die Felder in den Detailbereich ziehen, die im Formular gewünscht sind. Natürlich können die einzelnen Textfelder auch über die Toolbox erstellt werden, wobei dann bei jedem Textfeld der Steuerelementinhalt zu definieren ist. Als günstig erweist es sich, wenn jedem Text- und Bezeichnungsfeld ein eigener Name gegeben wird (im Register Alle Eigenschaft Name), damit später jedes Steuerelement eindeutig identifiziert werden kann. Nachdem man alle Textfelder und die dazugehörigen Bezeichnungsfelder formatiert und nach seinen Vorstellungen gestaltet hat, kann man mit Linien oder Rechtecken das Formular noch übersichtlicher gestalten. Weiters könnte auch noch ein Bild eingefügt werden, z.B. in den Formularkopf, und am Schluss könnte das Formular folgendes Aussehen haben (Datensatzmarkierer und Trennlinien sind bei den Formulareigenschaften auf Nein gesetzt worden): 31 Mit Befehlsschaltflächen lassen sich verschiedene Aktionen ausführen. Man kann mittels Befehlsschaltfläche Daten speichern, einen neuen Datensatz anlegen, ein Formular öffnen bzw. schließen oder durch ein angelegtes Menü navigieren, wobei im Hintergrund ein kleines Programm (eine sog. Prozedur) abläuft. In Formularen werden z.B. die Navigationsschaltflächen häufig durch Befehlsschaltflächen ersetzt. Dieses Beispiel soll im folgenden Abschnitt demonstriert werden. Auf dem zuvor erstellten Formular sollen im Formularfuß folgende Schaltflächen aufscheinen: Erster Datensatz Vorheriger Datensatz Nächster Datensatz Letzter Datensatz Datensatz hinzufügen Außerdem soll eine Schaltfläche zum Schließen des Formulars erstellt werden. In der Entwurfsansicht des Formulars wird aus der Toolbox die Schaltfläche für Befehlsschaltflächen ausgewählt und im Formular an geeigneter Stelle eine Fläche aufgezogen. Automatisch gelangt man dann in den Befehlsschaltflächen-Assistenten. In der Kategorie Formularoperationen wird die Aktion Formular schließen ausgewählt. Klickt man auf Weiter, kann im nächsten Schritt noch ein Beschriftungstext oder ein Bild für die Schaltfläche ausgesucht werden, z.B. das Exit-Symbol. Im letzten Schritt wird noch der Name der Schaltfläche eingegeben (etwa "btnSchließen"). Die Navigationsschaltflächen werden auf ähnliche Weise produziert. Unter der Kategorie Datensatznavigation sind die verschiedenen Navigationsaktionen zu finden. In diesem Beispiel benötigt man die Aktionen Gehe zu ersten/letzte Datensatz sowie Gehe zum vorherigen/nächsten Datensatz. Schließlich ist aus der Kategorie Datensatzoperationen noch die Aktion Neuen Datensatz anfügen zu wählen. Den Schaltflächen sollten wieder eindeutige Namen zugeordnet werden (beginnend mit btn für Button). Damit nur diese Schaltflächen zum Navigieren verwendet werden, wird in den Formulareigenschaften die Eigenschaft Navigationsschaltflächen auf Nein gesetzt. Hier das Ergebnis: 32 Diese sechs Schaltflächen sollen nun auch auf den Formularen "Semestereingabe" und "Noteneingabe" angebracht werden. 14. Makros Ein Makro ist eine Abfolge von Aktionen, die sich mit einem Tastendruck oder Mausklick starten lässt und dann automatisch abläuft. Es soll für die bestehende Datenbank ein Menü erstellt werden, das automatisch beim Öffnen der Datenbank erscheint. Durch Schaltflächen soll es dem Benützer ermöglich werden, bequem zu den einzelnen Formularen und wieder zurück ins Menü zu gelangen. Dieses Menü soll folgendes Aussehen haben: Klickt man auf die Schaltfläche Studierende eingeben, gelangt man zum Formular "Semestereingabe". Praktisch ist es, wenn das aufgerufene Formular gleich im Vollbildmodus geöffnet wird. Dazu müssen im entsprechenden Formular die Eigenschaften folgendermaßen eingestellt werden: Eigenschaft Bildlaufleisten Datensatzmarkierer Wert Nein Nein Navigationsschaltflächen PopUp Nein Ja Gebunden Ja Bedeutung Der Datensatzmarkierer wird nur benötigt, wenn ein Datensatz gelöscht werden soll. PopUp-Formulare bleiben immer in Vordergrund, auch wenn es nicht mehr aktiv ist. Ein Umschalten in den Entwurfmodus ist nicht möglich. Wird die Eigenschaft auf Ja gesetzt, können in Access keine anderen Aktionen mehr ausgeführt werden, solange nicht vorher das Formular bearbeitet und geschlossen wurde. Damit lassen sich also Eingaben erzwingen. Alle anderen Fenster (auch nicht das Datenbankfenster) 33 und die Menüleiste sind nicht benutzbar. Achtung bei gebundenen PopUp-Formularen: Fehlt die Möglichkeit zum Schließen, kann Access nur mehr mittels Task-Manager geschlossen werden! Rahmenart Mit Systemmenüfeld Keine Nein MinMaxSchaltfläche SchließenSchaltfläche Kontextmenü Keine Nein Nein Die Einstellung Nein bewirkt, dass nach dem Öffnen des Formulars weder das Systemmenü-Symbol in der linken oberen Fensterecke noch drei Kästchen in der rechten oberen Ecke erscheinen. Ist das Kontextmenü auf Nein gesetzt, ist das Aufrufen des Kontextmenüs durch die rechte Maustaste nicht möglich. All diese Einstellungen bewirken, dass das Formular der Optik eines Dialogfeldes entspricht. Auch für das Unterformular sind noch einige Eigenschaften zu definieren. Auch dieses ist zuvor mit Navigationsschaltflächen zu versehen. Eigenschaft Bildlaufleisten Datensatzmarkierer Wert Nein Nein Navigationsschaltflächen Rahmenart Mit Systemmenüfeld Nein Keine Nein MinMaxSchaltfläche SchließenSchaltfläche Kontextmenü Keine Nein Nein Bedeutung Der Datensatzmarkierer wird nur benötigt, wenn ein Datensatz gelöscht werden soll. Die Einstellung Nein bewirkt, dass nach dem Öffnen des Formulars weder das Systemmenü-Symbol in der linken oberen Fensterecke noch drei Kästchen in der rechten oberen Ecke erscheinen. Ist das Kontextmenü auf Nein gesetzt, ist das Aufrufen des Kontextmenüs durch die rechte Maustaste nicht möglich. Zurück zum Menü: Das Formular "Semestereingabe" soll mittels Makro automatisch geöffnet und später dann auch wieder geschlossen werden. Im Datenbankfenster aktiviert man zunächst das Objekt Makro und wählt dann NEU aus – das Makrofenster öffnet sich. In die Spalte Aktion trägt man in chronologischer Reihenfolge alle Befehle ein, die dann nacheinander abgearbeitet werden. In der Spalte Kommentar lassen sich erklärenden Anmerkungen anbringen. Es soll nun in diesem ersten Makro zuerst ein Formular geöffnet werden. Aus dem Kombinationsfeld der ersten Aktionszeile wird Öffnen Formular ausgewählt. Bei den Aktionsargumenten wählt man den Namen des zu öffnenden Formulars aus, also "Semestereingabe". 34 Als nächstes soll das Formular "Menü", von dem aus das Semestereingabe-Formular aufgerufen wird, geschlossen werden. Dabei ist der Objekttyp und -name des zu schließenden Objektes zu definieren, da sonst das aktuelle Fenster geschlossen wird. Zum Schluss wird noch das aktuelle Fenster (in dem Fall ist das dann das Semestereingabe-Formular) auf Vollbild gesetzt. Der Aktionsablauf ist also wie folgt festzusetzen: Aktion Öffnen Formular Maximieren Schließen Aktionsargumente Formularname: Semestereingabe Objekttyp: Formular Objektname: Menü Beim Schließen des Makrofensters wird man, wie gewohnt, aufgefordert, einen Speichernamen anzugeben ("Öffnen Semestereingabe"). Damit nun das Makro auch eingebunden werden kann, wird noch das Menü-Formular benötigt. Es wird also ein neues Formular in der Entwurfsansicht erstellt und ein Bezeichnungsfeld mit dem Titel "Menü" eingefügt. Das Formular wird unter dem Namen "Menü" abgespeichert. Dann wird die Schaltfläche erzeugt, die einen zum Formular "Semestereingabe" führen soll. Dazu wird neben der Entwurfsansicht des Menüformulars noch das Datenbankfenster eingeblendet (mit Hilfe des Menüs FENSTER – NEBENEINANDER). Im Datenbankfenster wird das Objekt Makros gewählt und das Makro "Öffnen Semestereingabe" markiert. Zieht man dieses Makro nun mit gedrückter Maustaste in das Entwurfsfenster des Menüs, wird beim Loslassen der Maustaste an der gewünschten Stelle automatisch eine Schaltfläche kreiert, deren Aussehen (Größe, Beschriftung, Name usw.) dann noch nach Bedarf verändert werden kann. In den Eigenschaften der Schaltfläche wurde im Register Ereignis der Makroname eingefügt. Natürlich könnte man die Schaltfläche auch über die Toolbox erstellen, wobei der BefehlsschaltflächenAssistent sofort abzubrechen ist. Genauso wie hier im Eigenschaftsfenster ersichtlich ist, müsste in der Ereigniszeile Beim Klicken der entsprechende Makroname eingetragen werden. Um das Menü zu vervollständigen wird auch das Formular "Noteneingabe" mit den entsprechenden Schaltflächen und Eigenschaften versehen, ein Makro erstellt und die Schaltfläche zum Öffnen des Formulars ins Menü eingetragen. Damit von nun an beim Öffnen der Datenbank immer gleich automatisch das Menü geöffnet wird, braucht man ein Startmakro. Man wählt also im Datenbankobjekt Makro den Befehl NEU und erstellt folgende Aktionsabfolge: Aktion Öffnen Formular Aktionsargumente Formularname: Menü Datenmodus: Nur Lesen Maximieren 35 Dieses Makro wird unter dem Namen AUTOEXEC abgespeichert. Das Makro dieses Namens wird beim Öffnen einer Datenbank automatisch beim Start abgearbeitet. Soll beim Starten verhindert werden, dass dieses Makro abgearbeitet wird, so ist das Programm mit gedrückter Umschalttaste zu starten. Damit man aus der Datenbank (sprich aus dem Menü) wieder aussteigen kann, ist ein neues Makro zum Schließen des Formulars und Beenden des Programms notwendig. Will man dem Benutzer vom Menü aus einen Zugriff auf das Datenbankfenster ermöglichen, bräuchte man eine Schaltfläche zum Schließen des Menüs. Das Makro zum Beenden würde dann so aussehen: Aktion Schließen Aktionsargumente Objekttyp: Formular Objektname: Menü Verlassen Im Menü-Formular wird dann wieder eine entsprechende Schaltfläche erstellt. Die Eigenschaften des Menüs müssen natürlich jetzt auch noch entsprechend eingestellt werden: Eigenschaft Bildlaufleisten Datensatzmarkierer Navigationsschaltflächen PopUp Gebunden Rahmenart Mit Systemmenüfeld MinMaxSchaltfläche SchließenSchaltfläche Kontextmenü Wert Nein Nein Nein Ja Ja Keine Nein Keine Nein Nein Und noch einen Schönheitsfehler hat das Menü-Konstrukt: Man kommt zwar jetzt vom Menü aus zu den verschiedenen Formularen, aber die Formulare selbst lassen sich nur schließen. Es fehlt also die Möglichkeit, vom Formular wieder ins Menü zu wechseln. Darum werden neue Makros erstellt: Aktion Öffnen Formular Maximieren Schließen Aktionsargumente Formularname: Menü Datenmodus: Nur lesen Objekttyp: Formular Objektname: Semestereingabe Noteneingabe, Information Studierende Die Schaltflächen zum Schließen müssen auf den jeweiligen Formularen natürlich noch mit den Makros verknüpft werden. Dazu wählt man im Register Ereignis der jeweiligen Schaltfläche bei der Eigenschaft Beim Klicken das passende Makro aus. Achtung auch bei der Namensvergabe bei den Makros: Die Aktionsfolgen sollten eindeutige Namen bekommen, damit es später bei der Auswahl zu keinen Irrtümern kommt. Folgende Makros wurden bis jetzt in der Schülerverwaltungsdatenbank erstellt: 36 Da bei umfassenden Datenbanken meist eine recht große Anzahl an Makros vorhanden ist, werden diese sinnvollerweise zu Makrogruppen zusammengefasst. Pro Makrofenster können dann gleich mehrere Makros erstellt werden, wobei jedem Makro ein Makroname gegeben wird. Klickt man im Makrofenster das Symbol "Makroname" an, wird eine zusätzliche Spalte Makroname eingefügt. Symbol zum Erstellen einer Makrogruppe Insgesamt werden die einzelnen Makros aber unter einem Namen abgespeichert, können aber dann auch wieder separat angesprochen (Makrogruppenname.Makroname) und ausgeführt werden. Außerdem lassen sich in Makros bestimmte Bedingungen einbauen. Z.B. könnte man im Formular "Semestereingabe" eine Meldung anzeigen lassen, die immer dann erscheint, wenn das Feld "Semester" leer ist. Die Spalte Bedingung erhält man, wenn man das Symbol "Bedingung" anklickt. Symbol zum Einfügen von Bedingungen Das Kriterium für dieses Makro ist, ob im Feld "Semester" ein Eintrag ist oder nicht. Damit dieses Feld angesprochen werden kann, braucht man folgende Syntax: Objektgruppe!Objektname!Steuerelementname Beinhalten einzelne Objektnamen Leerzeichen, müssen diese Objektnamen in eckige Klammern gesetzt werden, was man prinzipiell immer tun kann. Das Makro müsste dann also so aussehen: Bedingung IstNull([Formulare]![Semestereingabe]![Semester]) Aktion Meldung Aktionsargumente Meldung: Bitte Semester eingeben! Typ: Information Titel: Information StopMakro Die Funktion IstNull() prüft, ob ein Feld leer ist oder nicht. Wenn es leer ist, erscheint eine Meldung und das Makro ist damit beendet. Natürlich könnte man noch eine Aktion eingeben, für den Fall, dass das Feld nicht leer ist. Dieses Makro wird nun ins Formular "Semestereingabe" eingebunden, und zwar beim Ereignis: Beim Anzeigen. 15. Kombinationsfelder und deren Synchronisation Als letztes Beispiel soll ein Formular erstellt werden, in dessen Kopf man aus einem Kombinationsfeld zuerst ein Schuljahr auswählt, woraufhin ein weiteres Kombinationsfeld eingeblendet wird, aus dem ein zum 37 Schuljahr passendes Semester auszuwählen ist. Hat man auch das Semester ausgewählt, erscheint im Detailbereich des Formulars eine Auflistung der Studierenden dieses Semester und ihrer Informatiknoten. Dafür braucht man zuerst einmal eine Auswahlabfrage mit folgenden Feldern: Feld: ID-Semester Nachname Vorname Tabelle: Sortierung: Studierende Studierende Aufsteigend Studierende Note Access Noten Note Programmieren Noten Note Theorie Noten Das Feld " ID-Semester" wird zur eindeutigen Identifikation der Studierenden benötigt, damit Sie auch in die richtigen semester zugeteilt werden. Da ja auch die Studierenden angezeigt werden sollen, bei denen noch keine Noten eingetragen wurden, sind die Verknüpfungseigenschaften zwischen den beiden Tabellen in der Abfrage wie folgt einzustellen (durch einen Doppelklick auf die Verknüpfungslinie): Die Abfrage wird unter dem Namen "Anzeige Studierende + Noten" abgespeichert. Als nächstes wird ein tabellarisches Formular (Autoformular: Tabellarisch) aus der vorher erstellten Abfrage angelegt. In der Entwurfsansicht vergrößert man dann noch den Formularkopf, in dem später die Kombinationsfelder angebracht werden. Das Formular wird unter dem Namen "Anzeige Studierende + Noten". Im nächsten Schritt erfolgt die Erstellung des ersten Kombinationsfeldes für die Auswahl des Schuljahres. Auch diesem liegt wieder eine Abfrage zugrunde, die "Anzeige Schuljahr" genannt werden soll. Für diese Abfrage benötigt man lediglich das Feld "Schuljahr" aus der Tabelle "Semester". Es soll aufsteigend sortiert werden. Das Problem ist, dass ja zu jedem Schuljahr meist mehrere Semester vorliegen. Im Kombinationsfeld soll aber jedes Schuljahr nur einmal aufscheinen. Deshalb wird in den Abfrageeigenschaften (können durch einen Klick mit der rechten Maustaste in die obere Hälfte des Abfragefensters aufgerufen werden) Keine Duplikate auf Ja gesetzt. Um nun das Kombinationsfeld zu erstellen, öffnet man das zuvor erstellte Formular in der Entwurfsansicht, wählt aus der Toolbox die Schaltfläche für das Kombinationsfeld aus und zieht im Formularkopf eine entsprechende Fläche auf. der Kombinationsfeld-Assistent hilft nun bei der weiteren Vorgehensweise: 1. Die Datenherkunft muss definiert werden. Man wählt die Option Das Kombinationsfeld soll die Werte aus einer Tabelle oder Abfrage entnehmen. 2. Als nächstes muss die Tabelle bzw. Abfrage ausgewählt werden, aus der die Daten bezogen werden. Man wählt die Abfrage "Anzeige Schuljahr" aus. 3. Dann wählt man die Felder aus, die im Kombinationsfeld angezeigt werden sollen, was in diesem Fall nur das Schuljahr ist. 4. Schließlich lässt sich noch die gewünschte Breite des Kombinationsfeldes einstellen. 5. Weiters ist auszuwählen, ob der gewählte Wert in der Datenbank gespeichert oder lediglich zwischengespeichert werden soll – man wählt die Option Zur späteren Verwendung zwischenspeichern. 6. Eine Beschriftung wird vorgeschlagen – hier kann "Schuljahr" verwendet werden. Nachdem man das Kombinationsfeld fertig gestellt hat, sollte ihm noch ein eindeutiger Name zugeordnet werden (etwa "cmdSchuljahr"), was in den Eigenschaften des Kombinationsfeldes einzustellen ist. Weiter geht es mit der Erstellung des zweiten Kombinationsfeldes für die Auswahl des Semesters. Es sollen hier nur die Semester angezeigt werden, die auch im ausgewählten Schuljahr, d.h. in dem Schuljahr, das im ersten Kombinationsfeld ausgewählt wurde, existieren. Die Datenbereitstellung erfolgt wieder über 38 eine Abfrage, für die man die Felder "ID-Semester" (dient zur eindeutigen Identifikation), "Schuljahr" und "Semester" benötigt. Damit der Eintrag aus dem Kombinationsfeld "Schuljahr" übernommen wird, nimmt man direkt auf dieses Steuerelement Bezug. Somit muss das Kriterium im Feld "Schuljahr" lauten: =[Formulare]![Anzeige Studierende + Noten]![cmbSchuljahr] Allgemein spricht man ein Steuerelement mit folgender Syntax an: [Objekttyp]![Objektname]![Steuerelementname] Die Abfrage wird unter "Anzeige Semester" abgespeichert. Für die Erstellung des dazugehörigen Kombinationsfeldes wird wieder der Assistent zu Rate gezogen. Die Werte stammen aus der Abfrage "Anzeige Semester". Anzeigen lässt man die Felder "Semester" und "IDSemester", denn nur dieser Wert identifiziert eindeutig, welche Studierende in welches Semester gehören. Die Breite des ID-Feldes wird quasi auf Null gestellt, damit es später nicht gezeigt wird. Zur eindeutigen Identifikation wird das Feld "ID-Semester" angegeben. Wieder werden die Daten nur zur späteren Verwendung zwischengespeichert. Und schließlich legt man noch die Beschriftung für das Kombinationsfeld fest sowie dann nach seiner Fertigstellung den internen Namen (z.B. "cmbSemester"). Noch funktioniert die Datenübergabe vom 1.Kombinationsfeld aufs 2.Kombinationsfeld nicht. Hierfür ist die Synchronisation der beiden Kombinationsfelder erforderlich, was mit einem kurzen Makro ("Semester auswählen") erledigt werden kann: Aktion AktualisierenDaten Aktionsargumente Steuerelementname: cmbSemester Der Befehl Aktualisieren Daten bewirkt, dass das Objekt neu abgefragt bzw. berechnet wird. In diesem Beispiel heißt das, dass die Abfrage "Anzeige Semester" neu durchgeführt wird. Das Makro muss dann noch an der richtigen Stelle eingebunden werden, und zwar gibt man bei den Eigenschaften des "cmbSchuljahr" unter dem Register Ereignis ein, dass das Makro "Semester auswählen" bei Änderung durchzuführen ist. Schließlich ist noch die Ermittlung der passenden Studierendendaten notwendig, d.h. eine Synchronisation der Datensätze mit dem "cmbSemester" steht noch aus. Dies kann man mit einem Filter bewerkstelligen. Es wird das Formular "Anzeige Studierende + Noten" in der Formularansicht" geöffnet und aus dem Menü DATENSÄTZE der FILTER – SPEZIALFILTER/-SORTIERUNG ausgewählt. Im Filter wird lediglich das Feld "ID-Semester" mit folgendem Kriterium benötigt: [Formulare]![Anzeige Studierende + Noten]![cmbSemester] Normalerweise werden Filter nicht gespeichert. Dieser Filter muss hingegen abgespeichert werden, und zwar als Abfrage. Im Menü DATEI wird der Punkt ALS ABFRAGE SPEICHERN ausgewählt und der Speichername "Filter" eingegeben. Im Kombinationsfeld "cmbSemester" ist der eindeutige Wert "ID-Semester" zwischengespeichert. Dieser Wert soll nun in das Feld "ID-Semester" der folgenden Datensätze übernommen werden. Sobald sich die Semesterwahl verändert, soll dieser Filter angewendet werden. Ein Makro macht dies möglich: Aktion AnwendenFilter Aktionsargumente Filtername: Filter Das Makro wird unter dem Namen "Filter anwenden" gespeichert. Eingebaut wird es in den Eigenschaften des "cmbSemester", wo es Bei Änderung ablaufen soll. 39 Das Formular müsste jetzt eigentlich funktionieren. Vielleicht würden noch ein paar optische Verschönerungen nicht schaden … Man könnte z.B. über den Kombinationsfeldern Bezeichnungsfelder einfügen, die die Aufschrift "Bitte wählen Sie ein Schuljahr (bzw. Semester) aus" tragen. Man gibt ihnen entsprechende Namen, nämlich "lblSchuljahr" und "lblSemester". Weiters sollte beim Öffnen des Formulars nur das 1.Bezeichnungsfeld sowie das dazugehörige Kombinationsfeld erscheinen. Bei allen anderen Steuerelementen (also beim 2. Bezeichnungsfeld und dem dazugehörigen Kombinationsfeld) wird die Eigenschaft Sichtbar auf Nein gesetzt. Außerdem ändert man die Sichtbarkeit des gesamten Detailbereichs des Formulars. Damit die unsichtbar gesetzten Felder und Datensätze dann im richtigen Augenblick wieder sichtbar werden, muss man die zuvor erstellten Synchronisationsmakros noch erweitern: MAKRO "SEMESTER AUSWÄHLEN" Aktion AktualisierenDaten SetzenWert Aktionsargumente Steuerelementname: cmbSemester Element: [lblSemester].[Sichtbar] Ausdruck: Ja Element: [cmbSemester].[Sichtbar] Ausdruck: Ja Element: [Detailbereich].[Sichtbar] Ausdruck: Nein SetzenWert SetzenWert Durch den Befehl SetzenWert kann man den Wert eines Formularfeldes, aber auch die Eigenschaften eines Steuerelements verändern. Die Eigenschaft des Steuerelements wird dabei so angesprochen: [Steuerelementname].[Eigenschaft] MAKRO "FILTER ANWENDEN" Aktion AnwendenFilter SetzenWert Aktionsargumente Filtername: Filter Element: [Detailbereich].[Sichtbar] Ausdruck: Ja Die Abfolge sieht nun folgendermaßen aus: 1. 2. 40 3. 16. Formulare mit Suchfunktion Es soll ein Formular erstellt werden, in dessen Kopf man den Vor- und Nachnamen eines Studierenden eingeben kann und über einen entsprechenden Button eine Suchabfrage starten kann. Im Detailbereich des Formulars, der zunächst auf unsichtbar gestellt wurde, sollen dann die Daten des gesuchten Studierenden (Adresse, Telefonnummer, E-Mail sowie Geburtsdatum) aufscheinen. Es wird ein neues Formular in der Entwurfsansicht erstellt. Im Formularkopf werden zuerst zwei unabhängige Textfelder aufgezogen. Man ändert die Beschriftungen auf "Vorname" und "Nachname" um und gibt den Feldern die Namen "Studierendenvorname" sowie "Studierendennachname". Weiters wird eine Befehlsschaltfläche erzeugt, über die dann ein Makro aufgerufen wird. Der Formularkopf könnte dann etwa folgendes Aussehen haben: In den Formulareigenschaften wird unter der Rubrik Daten die Datenherkunft eingestellt. In diesem Fall stammen sämtliche Daten aus der Tabelle "Studierende". Es erscheint daraufhin die Feldliste mit sämtlichen zur Verfügung stehenden Datenfeldern. Die benötigten Felder zieht man nun einfach in den Detailbereich des Formulars. In den Eigenschaften des Detailbereichs wird unter der Rubrik Format der Wert Sichtbar auf Nein gesetzt. Das Formular wird unter dem Namen "Studierendensuche" abgespeichert. Für das Auslesen des eingegebenen Studierendennamen ist eine Auswahlabfrage mit entsprechendem Filterkriterium notwendig. Für die Abfrage werden nur die Felder "Vorname" und "Nachname" aus der Tabelle "Studierende" benötigt. Mit Hilfe der Kriterien wird nun herausgefiltert, was der Benutzer im Suchformular in die Felder "Studierendenvorname" und "Studierendennachname" eingetragen hat. Damit diese Felder angesprochen werden können, braucht man folgende Syntax: Objektgruppe!Objektname!Steuerelementname Die Objektgruppe sind in diesem Fall die "Formulare". Der Objektname lautet "Studierendensuche" und der Steuerelementname "Studierendenvorname" bzw. "Studierendennachname". Somit ist unter den Kriterien folgendes einzutragen: Wie [Formulare]![Studierendensuche]![Studierendenvorname] Wie [Formulare]![Studierendensuche]![Studierendennachname] 41 Man kann um die jeweiligen Elemente auch eckige Klammern setzen. Diese sind v.a. dann zwingend notwendig, wenn sich die Elementnamen aus jeweils mehreren Wörtern zusammensetzen. Die Abfrage wird unter dem Namen "Filter Studierende" abgespeichert. Im letzten Schritt wird ein Makro erstellt, welches beim Betätigen der Schaltfläche die Filterabfrage aufruft und den Detailbereich des Formulars sichtbar macht. Folgende Aktionen werden dafür benötigt: Aktion AnwendenFilter SetzenWert Aktionsargumente Filtername: Filter Studierende Element: [Detailbereich].[Sichtbar] Ausdruck: Ja Durch den Befehl SetzenWert kann man den Wert eines Formularfeldes, aber auch die Eigenschaften eines Steuerelements verändern. Die Eigenschaft des Steuerelements wird dabei so angesprochen: [Steuerelementname].[Eigenschaft] Das Makro wird unter dem Namen "Studierenden suchen" abgespeichert und dann mit der Befehlsschaltfläche des Suchformulars verknüpft. Dabei wird bei den Eigenschaften der Schaltfläche beim Ereignis Beim Klicken das entsprechende Makro ausgewählt. Wird nun eine Suche durchgeführt, zeigt sich folgendes Bild: 42