Windows-Ecke datenbanken
Grundlegendes zum Kurs
Windows Ecke Ende letzten Jahres haben wir Sie in einer Umfrage aufgef...
40 downloads
493 Views
962KB Size
Report
This content was uploaded by our users and we assume good faith they have the permission to share this book. If you own the copyright to this book and it is wrongfully on our website, we offer a simple DMCA procedure to remove your content from our site. Start by pressing the button below!
Report copyright / DMCA form
Windows-Ecke datenbanken
Grundlegendes zum Kurs
Windows Ecke Ende letzten Jahres haben wir Sie in einer Umfrage aufgefordert, Themen für die Windows-Ecke zu nennen. Wie sich darin herausgestellt hat, besteht ein breiter Bedarf nach einem Datenbank-Kurs. Dabei scheinen Grundlagen ein echtes Bedürfnis zu sein – dies im Gegensatz zu Applikationen wie Word oder Excel, wo sich doch eher Fortgeschrittene zusätzliche Tips und Tricks wünschen. In unserem Einsteigerkurs für Datenbanken werden wir den (heutigen) Datenbankklassiker Access von Microsoft in seiner wahrscheinlich verbreitetsten Version 97 verwenden - mit gewissen Einschränkungen können Sie aber problemlos auch frühere Versionen von Access für den Kurs benützen. In der Umfrage hat sich ganz klar gezeigt, dass Access eine enorme Verbreitung aufweist und - ähnlich wie in den 80erJahren der Datenbankklassiker «dBase» - als Volkswagen der Datenbank-Gilde gilt. In lediglich einem Fall wünschte ein Leser einen Kurs mit dem Datenbanksystem FileMaker, ebenfalls einmal wurde Paradox erwähnt. Dies erstaunt eigentlich nicht weiter, denn mit Access lassen sich sehr schnell ansprechende Ergebnisse erzielen, und selbst professionelle Applikationen lassen sich ohne eine einzige Zeile Programmiercode erstellen. 2
MegaLink 9/99
Access on Data Das Front-End-Genie Zudem ist es mit Access praktisch immer irgendwie möglich, auf Daten aus anderen Datenbanken oder sonstigen Applikationen zuzugreifen, wenn diese nur strukturiert vorliegen. Mit «strukturiert» meinen wir, dass gleiche Daten (z. B. Name, Vorname, Ort) in den einzelnen Datensätzen stets an der gleichen Stelle stehen und durch ein bestimmtes Zeichen wie Komma, Doppelpunkt oder Anführungszeichen begrenzt sind und das Ende eines jeden Datensatzes mit einem anderen, eindeutigen Zeichen (z. B. Carriage Return, Tabulator usw.) markiert ist. In diesem Bereich kann Access als Chamäleon bezeichnet werden – es ist problemlos möglich, in einer Datenbank Tabellen von verschiedensten Quellen (Fremddatenbanken) dynamisch einzubinden, so zu neuen Erkenntnissen zu gelangen und die Datenquellen wieder zu verlassen, ohne je die Daten in einer separaten Datenbank abgespeichert zu haben. Zu neuen Erkenntnissen Es gehört auch zu den einfacheren Übungen, Daten aus den verschiedensten Quellen mit einer Abfrage in eine neue Datenbank zu transferieren, um so mit geringem Aufwand zu einer neuen Da-
tenbank zu gelangen, deren Daten dann vielleicht einem breiteren Publikum oder dem Chef zugänglich gemacht werden können, ohne dass ein «Crack» gleich an den gesamten, lebenswichtigen Datenbestand einer Firma gelangt oder die Daten mehr oder weniger mutwillig zerstört werden. Denn an Daten, die in einem am Netz angeschlossenen Rechner oder gar in der veröffentlichten Datenbank vorliegen, kommt jeder mehr oder weniger gewiefte Hacker mit relativ geringem Aufwand heran. Liegen die ursprünglichen Daten aber auf einem nicht am Netz angeschlossenen Rechner und wurden mit Access aus einer ganzen Anzahl Datenbanken mit einer oder mehreren Abfragen
extrahiert, dann wird es praktisch unmöglich, den gesamten Datenbestand auszuspionieren – ganz einfach aus dem Grund, weil die Ursprungsdatenbank via Netz gar nicht erreichbar ist. Ohne Programmierung Doch genug der grauen Theorie, wir wollen uns hier praktischen Beispielen widmen und dabei vor allem auf die Besonderheiten und Vorteile eines relationalen Datenbanksystems eingehen. Ein Ziel dabei: Wir möchten die ganze – jederzeit mit weiteren Tabellen erweiterbare – Datenbank ohne eine einzige Zeile zu programmieren nur mit Makros realisieren und uns vor allem mit auf mehreren Tabellen verteilten Daten befassen. Max Geissbühler
Auf vielseitigen Wunsch beschäftigen wir uns in der Windows-Ecke mit dem Datenbankklassiker «Access» von Microsoft! In den nächsten Wochen möchten wir dabei die Grundlagen des relationalen Datenbanksystems kennenlernen und gleichzeitig eine funktionsfähige Datenbank erstellen.
Windows-Ecke datenbanken
Pflichtenheft ist Pflicht
Windows Ecke Ende letzten Jahres haben wir Sie in einer Umfrage aufgefordert, Themen für die Windows-Ecke zu nennen. Wie sich darin herausgestellt hat, besteht ein breiter Bedarf nach einem Datenbank-Kurs. Dabei scheinen Grundlagen ein echtes Bedürfnis zu sein – dies im Gegensatz zu Applikationen wie Word oder Excel, wo sich doch eher Fortgeschrittene zusätzliche Tips und Tricks wünschen. Wenn Sie bei unserem AccessKurs mitmachen, müssen Sie nur wenige Regeln befolgen! Um ein reibungsloses Funktionieren der Datenbank zu garantieren, ist es lediglich notwendig, dass Sie alle Felder, Feldnamen, Felddatentypen und -Grössen, die wir hier vorgeben, peinlich genau übernehmen. Wenn wir in einem Tabellen-, Formular-, Abfrage- oder Datenbanknamen einen Underscore (_) verwenden, benützen Sie diesen ebenfalls. Noch etwas zur Kompatibilität – benützen Sie in den vorher erwähnten Namen keine Umlaute wie ä, ö, ü oder Sonderzeichen, vor allem dann nicht, wenn irgendwie die Chance oder Notwendigkeit besteht, diese Tabellen in älteren Datenbanken wie dBase weiterzubearbeiten! Denn es könnte sonst sein, dass sich das ältere Programm hartnäckig weigert, die Daten zu importieren bzw. zu lesen. Andererseits – wer möchte schon seine 2
MegaLink 10/99
Access on Data (2) Access-Daten in einem anderen Programm weiterbearbeiten...!? Skalierbar Hingegen können Sie jeder Ihrer Tabellen problemlos weitere Felder hinzufügen, genauso wie Sie der Datenbank auch weitere Tabellen hinzufügen können. Allerdings müssen Sie dann selber wissen, wie und was Sie mit und in diesen zusätzlichen Feldern anfangen und bewirken und auch speichern wollen und welche Verknüpfungen Sie benötigen und realisieren. Vielleicht wird es Ihnen manchmal ein wenig übertrieben erscheinen, wenn wir in unseren Beispielen Tabellen mit ihren Inhalten aufsplitten – also zwei oder mehr Tabellen daraus machen! Es ist sogar sehr wohl möglich, dass es übertrieben ist – und ebensosehr ist es möglich, dass wir hier in unserem Beispiel damit keinen Platz sparen sondern vielmehr zusätzlich benötigen. In einer umfangreicheren Datenbank kann durch die Aufteilung von einer in mehrere Tabellen eine Menge Speicherplatz gespart werden. Es scheint auch übertrieben, bei den heutigen Festplattenpreisen und -kapazitäten Speicherplatz in KByte... MByte-Grösse sparen zu wollen. Aber wir sparen nicht nur Speicherplatz – eine geringere Datenmenge, die bei Sortierungen oder ähnlichen Datenbank-Manipulationen jedesmal durchsucht werden muss, macht ein Datenbanksystem um Faktoren schneller. Pflichtenheft Lassen Sie sich nie dazu verleiten, einfach «Drauflos-zu-DatenbankDesignen»! Erstellen Sie zualler-
Beginnen Sie das Design einer Datenbank stets mit einem Pflichtenheft - ergänzt durch die Dokumentation, die Access am Schluss einer Datenbank-Definition selbst erstellt, kann später jederzeit exakt nachvollzogen werden, wie die Datenbank aufgebaut ist!
erst ein Pflichtenheft – wobei mit Pflichtenheft hier ebenso eine kleine Skizze als auch ein ausführliches Pflichtenheft mit allen Schikanen gemeint sein kann. Notieren Sie sich wenigstens in kurzen Stichworten, welche Felder mit welcher Länge Sie benötigen, welche Funktionalität Sie erwarten und wie Sie die Daten aus den einzelnen Tabellen zueinander in Beziehung setzen wollen. Bewahren Sie dieses Pflichtenheft auch mit der Dokumentation Ihrer Datenbank auf, damit später in jedem Fall nachvollzogen werden kann, wie Sie zu diesem Design gekommen sind – denn nicht immer wird später unbedingt klar sein, für was die eine oder andere Abfrage oder Tabelle dient oder gedient hat und ob sie noch benötigt wird!
Gewöhnen Sie sich von Anfang an eine ausführliche Dokumentation des Datenbankdesigns. Access selbst stellt dafür in jeder Funktion speziellen Platz zur Verfügung – und das sicher nicht grundlos! Denn es gibt nichts Frustrierenderes, als wenn eine einzige gutgemeinte Änderung in einem Datenbankdesign aufgrund einer fehlenden Dokumentation zu unvorhersehbaren Fehlfunktionen führt, die im schlimmsten Fall erst nach einiger Zeit zutage treten! Nehmen wir als Beispiel eine Abfrage, die auf den ersten Blick überhaupt nicht mehr benötigt wird, und die wir dann für einen bestimmten Zweck abändern – und dabei basiert ein Bericht auf dieser Abfrage...! Max Geissbühler
Windows-Ecke datenbanken
Tabellen als Basis
Windows Ecke Ende letzten Jahres haben wir Sie in einer Umfrage aufgefordert, Themen für die Windows-Ecke zu nennen. Wie sich darin herausgestellt hat, besteht ein breiter Bedarf nach einem Datenbank-Kurs. Dabei scheinen Grundlagen ein echtes Bedürfnis zu sein – dies im Gegensatz zu Applikationen wie Word oder Excel, wo sich doch eher Fortgeschrittene zusätzliche Tips und Tricks wünschen. Zu unserem Pflichtenheft: Nehmen wir an, unser Unternehmen wäre ein Zwischenhändler für Bananen oder Pflaumen und unser Chef benötigt eine KontaktAdressdatenbank. Unser schlechtes Beispiel eines Pflichtenheftes könnte dann etwa folgende Einträge enthalten: Kunden-, Lieferanten- und Interessenten-Datenbank mit Eintragsmöglichkeiten für Anrede, Name, Vorname, Strasse, PLZ/ Ort und Telefon, Kontaktart (Kunde, Lieferant, Interessent). Um in Access eine Datenbank zu erstellen, genügen diese Angaben vorläufig. «Vorläufig» aus dem einen Grund: Diese Datenbank wird alles andere als optimal (sprich: relational) sein, und wir würden diese Funktionalität auch mit einem nicht relationalen Datenbanksystem – sprich: einem elektronischen Karteikasten – erreichen. Aber nur so zum Vergleich werden wir einmal beginnen und starten dazu Access einmal auf! Je nachdem, welche Version von Access wir verwenden, ist der 2
MegaLink 11/99
Access on Data (3) Einstiegsbildschirm etwas unterschiedlich. Dies soll uns aber nicht stören, wir weisen Access an, eine leere Datenbank zu öffnen. Hier fordert uns Access auf, einen Namen für die neue Datenbank zu vergeben. Wir taufen unsere Datenbank auf den Namen «Kontakte» und klicken auf «Erstellen». Dreh- und Angelpunkt Nun öffnet sich eine Dialogbox – wir werden sie in Zukunft zum besseren Verständnis als «Datenbank-Control-Center» (DCC) bezeichnen – die in den nächsten Folgen der Windows-Ecke in MegaLINK unser treuer Begleiter sein wird. Das Datenbank-Control-Center ist der Dreh- und Angelpunkt von Access-Datenbanken und alles, was wir an unserer Datenbank verändern oder ergänzen wollen, werden wir von hier aus erledigen. Sinnigerweise ist im DDC die Registerkarte «Tabelle» bereits selektiert, und hier definieren wir die Grundlagen unserer Datenbank «Kontakte». Eine Datenbank in Access (und auch in den meisten anderen Datenbanksystemen) besteht aus einer oder mehreren Tabellen. Diese Tabellen sind notwendig, um die Daten strukturiert zu speichern. Die Tabellen – die im übrigen wie Excel-Tabellen aussehen – haben Spaltenüberschriften, und jede Zeile in der Tabelle repräsentiert einen weiteren Datensatz. Aufgrund des obenerwähnten «Pflichtenheftes» beginnen wir mit der Erstellung einer Tabelle. Dazu klicken wir auf der Registerkarte «Tabelle» auf «Neu» und wählen im sich öffnenden Dialogfeld «Entwurfsansicht» und anschliessend «OK». Im nun geöffneten Tabellendefinitions-Fenster definieren wir das Grundgerüst für die
Hier werden die Grundlagen einer Datenbank definiert – in diesem Tabellendefinitionsfenster bestimmen Sie, welche Daten gespeichert werden sollen. Im Hintergrund sehen Sie unser Datenbank-Control-Center (DCC).
Datenbank, und dazu müssen wir die Feldnamen, Felddatentypen (mehr dazu später) und – wo nötig – die entsprechenden Feldlängen angeben. Feldnamen und Datentypen Beginnen wir also mit der Definition und schreiben in das erste Feld den Feldnamen «Anrede» und wählen als Felddatentyp «Text». Im unteren Drittel des TabellenDefinitionsfensters erscheint ein weiteres, separates Dialogfenster, hier lässt sich neben anderen Parametern auch die gewünschte Feldlänge angeben! Für das vorliegende Feld «Anrede» nehmen wir die längste zu erwartende Bezeichnung (z.B. «Fräulein Prof. Dr. rer. nat.») und veranschlagen diesen Wert mit 21 Zeichen. Da die überwiegende Anzahl der Kunden Männer sind, setzen wir noch den «Standardwert» auf «Herrn». So sparen wir uns unnötige Tipparbeit, denn in diesem Fall wird das Datensatz-
feld «Anrede» stets mit dem Wert «Herrn» ausgefüllt sein, und trotzdem kann es durch überschreiben einfach und rationell mit einem anderen Wert ausgefüllt werden. Wieder oben in dieser Dialogbox finden wir noch die Überschrift «Beschreibung»! Schreiben Sie hier Ihre Gedankengänge auf, was, warum und wie Daten in diesem Feld gespeichtert werden sollen. Tun Sie dies in Zukunft für jede Aktion in Ihrer Datenbank – und seien Sie versichert – absolut klar ist es sowieso nur für Sie und auch das nur, soweit ein Kurzzeitgedächtnis reicht. Beachten Sie, dass alles, was im Feld «Beschreibung» eingetragen wird, mit der Funktion des «Dokumentierers» in der Dokumentation der Datenbank erscheint und Sie also damit auch gleich ein Handbuch für die Datenbank erstellen – und das sollte wohl Grund genug sein, der «Beschreibung» die entsprechende Aufmerksamkeit zu widmen! Sie tun dies für sich – nicht für Access...! M. Geissbühler
Windows-Ecke datenbanken
Tabelle definieren
Windows Ecke Ende letzten Jahres haben wir Sie in einer Umfrage aufgefordert, Themen für die Windows-Ecke zu nennen. Wie sich darin herausgestellt hat, besteht ein breiter Bedarf nach einem Datenbank-Kurs. Dabei scheinen Grundlagen ein echtes Bedürfnis zu sein – dies im Gegensatz zu Applikationen wie Word oder Excel, wo sich doch eher Fortgeschrittene zusätzliche Tips und Tricks wünschen. Nun definieren wir auch die anderen benötigten Felder mit den folgenden Feldnamen: Vorname Name Strasse PLZ Ort Tel_Nr Kontakt Allen Feldern lassen wir den Standard-Felddatentyp «Text» mit einer Standard-Länge von 50 Zeichen mit Ausnahme des Feldes PLZ (Postleitzahl), das wir als Felddatentyp «Zahl» mit der Feldgrösse «Long Integer» definieren. Mit dieser Massnahme können wir Fehleingaben verhindern - da unter «Long Integer» nur Zahlen mit einem Wert zwischen -2 147 483 648 ... 2 147 483 647 (keine Bruchzahlen) gespeichert werden können und wir gleichzeitig mit diesem Zahlentyp auch Speicherplatz sparen. Zur Information sei hier am Rande erwähnt, 2
MegaLink 2/97
Access on Data (4) dass für ein Feld mit der Grösse «Long Integer» nur 4 Bytes reserviert werden. Würden wir nur Schweizerische Postleitzahlen speichern wollen, dann würde uns gar die Feldgrösse «Integer» reichen, die Zahlen zwischen -32768 ... 32 767 speichern kann und dafür nur 2 Bytes benützt, aber im Zeichen der Globalisierung...! Ein Feld pro Daten-Info Weiter möchte ich Sie an dieser Stelle bitten, von der weitverbreiteten Unsitte Abstand zu nehmen, die beiden Begriffe «Postleitzahl» und «Ort» in einem Feld unterzubringen zu wollen verwenden Sie hier stets 2 Felder! Sie werden dann bei der Optimierung der Datenbank selbst erkennen, dass Sie sich im umgekehrten Fall einen Bärendienst erwiesen hätten und nur Schwierigkeiten ernten! Wenn wir mit der Definition der Tabelle fertig sind, schliessen wir die Tabellendefinition ab, indem wir dieses Fenster – je nach Belieben über den Menübefehl «Datei/Schliessen» oder über die Schliessfelder oben rechts oder links in diesem Fenster – schliessen. Die Frage von Access, ob wir die Änderungen speichern wollen oder nicht, beantworten wir natürlich mit «Ja». In der anschliessenden Dialogbox ändern wir den Tabellennamen «Tabelle1» auf «Adresse» ab. Primärschlüssel Nun macht uns Access mit einer weiteren Dialogbox auf eines der grundlegenden Elemente von relationalen Datenbanken aufmerksam. Es reklamiert nämlich, dass wir noch kein «Primär-
Ein erster Erfolg – wir können bereits Daten in unserer Datenbank speichern!
schlüsselfeld» definiert hätten! Lesen Sie den Text in der Dialogbox aufmerksam durch und beantworten Sie die Frage, ob wir an dieser Stelle einen «Primärschlüssel» erstellen möchten, mit «Ja»! Was es mit diesen Primärschlüsselfeldern auf sich hat und wie wir diese verwenden, werden wir später noch sehen! Erste Erfolge Ein Doppelklick im DatenbankControl-Center auf das Symbol der Tabelle mit dem Namen «Adresse» öffnet uns nun diese vorhin erstellte Tabelle – die uns an ein Excel-Datenblatt erinnert – im Datenerfassungs-/EditierModus. Oben haben wir die Spaltennamen und in der ersten Zeile sehen wir, dass das eben besprochene Schlüsselfeld «ID» den Wert «1» enthält und unter «Anrede», dass hier bereits «Herrn» ausgefüllt ist. Wir können in dieser Tabelle bereits Daten erfassen und beginnen zu schreiben. Im Feld «ID» können wir keine Eingaben vornehmen, hier vergibt Access
selbständig eine fortlaufende Nummer. Es handelt sich hier um das vorgängig erwähnte «Primärschlüsselfeld», das auf «AutoWert» eingestellt ist. Gehen wir also mit der TabulatorTaste zum nächsten Feld «Anrede» und schreiben «Frau» in dieses Feld. Der voreingestellte Wert «Herrn» wird markiert und einfach überschrieben. Immer mit der Tab-Taste springen wir zum nächsten Feld und schreiben hier in der ersten Zeile den Datensatz: Frau Verena Muster Fliederweg 5000 Aarau 012 345 67 89 Interessent. Anschliessend ergänzen wir die Datenbank noch um einige Mustereinträge und schliessen die Tabelle. Benötigen Sie die Adressen wieder, dann genügt ein Doppelklick auf das Symbol der Tabelle und Sie finden die erstellten Einträge gemäss Bill Gates Wahlspruch «Information_at_your_Fingertips» immer wieder – Herz was willst du mehr!? Oder war da noch was...? Max Geissbühler
Windows-Ecke datenbanken
Formulare erleichtern Datenerfassung
Windows Ecke Ende letzten Jahres haben wir Sie in einer Umfrage aufgefordert, Themen für die Windows-Ecke zu nennen. Wie sich darin herausgestellt hat, besteht ein breiter Bedarf nach einem Datenbank-Kurs. Dabei scheinen Grundlagen ein echtes Bedürfnis zu sein – dies im Gegensatz zu Applikationen wie Word oder Excel, wo sich doch eher Fortgeschrittene zusätzliche Tips und Tricks wünschen.
Access on Data (5) nur jeweils einen Datensatz anzeigt. Denn es verwirrt viel zu sehr, wenn neben den Daten, die wir gerade eingeben, auch noch alle anderen, bereits eingetragenen Datensätze stets vor Augen haben! Wir kehren deshalb wieder zurück zu unserem Dreh- und Angelpunkt, dem DatenbankControl-Center in Access, wo wir die Tabelle definiert haben. Nun benötigen wir aber nicht eine neue Tabelle, sondern eine Datenmaske und zu diesem Zweck klicken wir im Datenbank-Control-Center auf Registerkarte «Formulare», «Neu» und wählen in der sich öffnenden Dialogbox den Begriff «AutoFormular_einspaltig». Ganz unten in der offenen Dialogbox «Neues Formular» se-
hen wir ein Listenfeld – hier können wir in Moment in Ermangelung weiterer Tabellen nur die einzige vorhandene Tabelle «Adresse» auswählen und klicken anschliessend auf «OK»! Und nach mehr oder weniger kurzer Zeit erscheint ein angenehm gestaltetes und freundlich aufgemachtes Formular, in dem sich bereits der erste Datensatz präsentiert, den wir in Folge 4 direkt in die Datentabelle eingetragen haben. Beinahe perfekt Nachdem uns Access die mühsame Arbeit abgenommen und ein mehr oder weniger perfektes Formular kreiert hat, wollen wir nicht unnötig anspruchsvoll sein und das Formular so akzeptieren,
wie es automatisch generiert wurde. Denn an dieser Stelle hätten wir die Möglichkeit, das Formular durch Handarbeit so zu gestalten, wie wir uns dies wünschen, also die Feldreihenfolge umzugruppieren, die Schrift anzupassen oder den Feldern andersfarbige Hintergründe zu spendieren. Wir lassen dies aber vorläufig noch bleiben, da wir diese Datenbank sowieso nur zum Zweck der Feststellung unzureichender Planung einer Datenbank verwenden. Schliessen wir also das Formular und speichern es unter dem sinnvollen Namen «Adress_Eingabe» ab.
Max Geissbühler
Hier noch die Antwort zur Frage aus der letzten Folge: Nein, das war noch nicht mal der Anfang, dies ist nur die Grundlage einer Datenbank. Eine Datenbank besteht einerseits aus einer oder mehreren Tabellen. Sie besteht andererseits aber auch aus einer Benutzerschnittstelle, und je attraktiver und bedienerfreundlicher so eine Benutzerschnittstelle ist, desto lieber (und damit produktiver) arbeiten die Benützer damit und desto weniger Fehler passieren bei der Eingabe der Daten. Attraktiv Zunächst mal zur Attraktivität! Die Daten lassen sich – wenigstens zur Not – auch in dieser Tabelle direkt eingeben - dies ist aber weder attraktiv noch bedienerfreundlich. Was wir benötigen, ist ein Formular (Datenmaske), das – schön gestaltet – die Dateneingabe ermöglicht und 2
MegaLink 13/99
Langsam nimmt unsere Datenbank Formen an – ohne viel Arbeit haben wir hier eine ansprechende Datenmaske kreiert, die das Arbeiten attraktiver macht!
Windows-Ecke datenbanken
Formular für jeden Zweck
Windows Ecke Ende letzten Jahres haben wir Sie in einer Umfrage aufgefordert, Themen für die Windows-Ecke zu nennen. Wie sich darin herausgestellt hat, besteht ein breiter Bedarf nach einem Datenbank-Kurs. Dabei scheinen Grundlagen ein echtes Bedürfnis zu sein – dies im Gegensatz zu Applikationen wie Word oder Excel, wo sich doch eher Fortgeschrittene zusätzliche Tips und Tricks wünschen. Nun, wenn uns schon ein so schönes Formular zur Verfügung steht, wollen wir auch gleich ausprobieren, ob es funktioniert – öffnen wir es also durch einen Doppelklick! Wieder erscheint der erste Datensatz im geöffneten Formular! Halt – wenn wir nun gleich zu schreiben beginnen, überschreiben wir den Datensatz im Formular – wir haben es hier also mit einem Editier- statt einem Erfassungsformular für Datensätze zu tun. Editieren oder... Einen neuen Datensatz können wir in diesem Formular auf mehrere verschiedene Arten eingeben: Entweder mit dem Menübefehl «Einfügen/Neuer_Datensatz» oder wenn wir uns ganz unten im Formular mit dem sogenannten Datensatz-Navigator (s. Bild ) mit den Pfeiltasten zum Ende der Datensätze begeben und mit der Eingabe erst beginnen, wenn im Formular keine 2
MegaLink 15/99
Access on Data (6) Daten angezeigt werden - ausser natürlich den automatischen Werten des Primärschlüsselfeldes und «Herrn» im Feld «Anrede». Damit wir nicht ständig unsere – je nach Beherrschung des 10Finger-Systems mehr oder weniger mühsam – erfassten Datensätze überschreiben, schlagen wir gleich zwei Fliegen auf einen Schlag und verwandeln unser erstes Formular in zwei: in ein Editier- und ein Erfassungsformular! Dazu gehen wir folgendermassen vor: Als erstes selektieren wir im Datenbank-Control-Center mit der rechten Maustaste das eben erstellte Formular und wählen im sich öffnenden Kontext-Menü den Befehl «Kopieren», klicken anschliessend noch einmal mit der rechten Maustaste auf eine freie Stelle und wählen wiederum im Kontext-Menü den Befehl «Einfügen»! Als Name für die Kopie des Formulares tippen wir hier «Adress_Editieren». ...neu erfassen! Das bisherige Formular wollen wir nun auch umbenennen. Einen neuen Namen für eine Tabelle oder ein Formular – und übrigens auch Abfragen, Berichte; Makros oder Module – können wir genau gleich vergeben, wie im Datei-Explorer. Ein ausserordentlich langsamer Doppelklick auf den Namen des umzubenennenden Objektes markiert den Text und wir können direkt einen neuen Namen vergeben. Merken Sie sich aber an dieser Stelle etwas sehr Wichtiges: Ändern Sie die Namen nur, solange Sie in anderen Objekten noch keinen Bezug auf das umzubenennende Objekt genommen haben – eine einzige unbedachte Änderung kann Ihre ganze Datenbank unbrauchbar machen.
Hier findet sich der sogenannte «DatensatzNavigator», mit dem Sie sich in einem Formular durch die Datensätze bewegen können!
Hier hat Access meiner Meinung nach einen Fehler, indem Bezüge auf diesen Namen lauten, der so einfach und problemlos und ohne Warnung geändert werden kann! Da wir aber noch keine anderen Objekte kreiert haben, dürfen wir in diesem Moment den Namen für das Eingabe-Formular auf «Adress_Eingabe» noch ändern! Anschliessend selektieren wir dieses soeben umbenannte «Adress-Eingabe»-Formular erneut, diesmal mit der rechten Maustaste und wählen den Kontext-Menübefehl «Entwurf», was das Formular im Entwurfsmodus öffnet. Klicken Sie jetzt mit der rechten Maustaste zwar innerhalb des Entwurfsfensters, aber ausserhalb der bereits definierten Eingabemaske und wählen Sie im Kontext-Menü den Menüpunkt «Eigenschaften». Eine Frage der Einstellung In der sich nun öffnenden Dialogbox wählen wir die Registerkarte «Daten», suchen den Eintrag «Daten_eingeben» und ändern den voreingestellten Wert «Nein» ab auf «Ja», indem Sie den Wert selektieren und «Ja» eintippen – übrigens bewirkt ein Doppelklick
auf den Wert «Nein» dasselbe! Der Wechsel dieses Wertes bewirkt, dass dieses Formular in Zukunft nur noch für die Eingabe von neuen Datensätzen verwendet werden kann - wir haben uns also wieder ein wenig mehr vor Falscheingaben - in diesem Fall vor dem Überschreiben von bereits bestehenden Datensätzen abgesichert und die Bedienerfreundlichkeit erhöht. Die vorher erstellte Kopie mit dem Namen «Adress_Editieren» sichern wir nun gegen das versehentliche Eingeben eines neuen Datensatzes, indem wir hier unter «Eigenschaften» den Eintrag «Anfügen_zulassen» mit dem Wert «Nein» versehen. Denn dieses Formular soll nur dem Editieren – also Ändern – von bereits bestehenden Datensätzen dienen! Nun könnten wir noch weitere Masken mit unterschiedlichen Eingenschaften wie «Daten_nur_ ansehen» definieren, für unsere Modelldatenbank sollte dies aber vorläufig genügen, Sie können sich ja selbst ein Bild über die verschiedenen Möglichkeiten verschaffen, indem Sie weitere Kopien des Formulars erstellen und damit ein wenig herumexperimentieren und die verschiedenen Eigenschaften probehalber verändern! Max Geissbühler
Windows-Ecke datenbanken
Kombinationsfelder verhindern Fehleingaben
Windows Ecke Ende letzten Jahres haben wir Sie in einer Umfrage aufgefordert, Themen für die Windows-Ecke zu nennen. Wie sich darin herausgestellt hat, besteht ein breiter Bedarf nach einem Datenbank-Kurs. Dabei scheinen Grundlagen ein echtes Bedürfnis zu sein – dies im Gegensatz zu Applikationen wie Word oder Excel, wo sich doch eher Fortgeschrittene zusätzliche Tips und Tricks wünschen. Lehnen wir uns also ein wenig zurück und seien wir doch mal zufrieden – denn um eine so komfortable Datenbank zu erstellen, hätte noch vor wenigen Jahren ein ausgewachsener Informatiker seine liebe Mühe gehabt. Überlegen wir doch mal, ob wir nicht doch noch was besser machen, also optimieren könnten!? Nein, bei Name und Adresse sowie Telefonnummer lässt sich nicht viel vereinfachen, denn hier ist jeder Datensatz doch ein wenig anders – Automatisieren bringt hier nicht viel! Im Feld «Kontakt» hingegen brauchen wir lediglich die 3 Werte «Kunde», «Lieferant» und «Interessent»! Das Fehlerpotential steigt mit den Eingabemöglichkeiten und da kann es schon mal passieren, dass uns hier der Begriff «Lieferent» oder «Kunse» reinrutscht und wir dies vorerst gar nicht bemerken. Wenn wir dann später allerdings eine Liste 2
MegaLink 16/99
Access on Data (7) aller «Kunden» herausfiltern, wird uns diese eine Adresse mit der fehlerhaften Eingabe fehlen. Vielleicht geht uns gerade durch diesen einen, winzigen, und im ersten Augenblick vernachlässigbaren Fehler DER Jahresauftrag durch die Lappen, nur weil ein Kunde auf der Mailingliste gefehlt hat. Eingabe abgesichert Es wäre somit ausserordentlich hilfreich, wenn wir hier nur genau die 3 Wörter zur Verfügung hätten, und noch besser, wenn wir sie nicht einmal schreiben, sondern vielmehr nur auswählen könnten...! Aber Access wäre wahrscheinlich nicht der Volkswagen unter den Datenbanken, wenn es nicht auch für dieses Problem eine verblüffend einfache Lösung parat hätte! Um die 3 erwähnten Begriffe «Kunde», «Lieferant» und «Inserent» möglichst komfortabel eingeben zu könnnen, leistet uns ein Pull-Down-Menü gute Dienste! Öffnen wir also noch einmal das Formular «Adress_ Erfassen» im Entwurfsmodus. Nun benötigen wir die Werkzeugliste mit dem Namen «Toolbox» von Access, die wahrscheinlich bereits auf dem Bildschirm sichtbar ist – andernfalls öffnen Sie diese, indem Sie im Menü auf «Ansicht/Toolbox» klicken. In der Toolbox selektieren wir ungefähr in der Mitte das Symbol «Kombinationsfeld». Sofort verändert sich der Mauszeiger in ein stilisiertes Pull-Down-Menü. Ein Mausklick an der Stelle im Formular, wo sich das PulldownMenü öffnen soll, öffnet eine Dialogbox. In dieser markieren wir nun den Wert «Ich_möchte_
Mit Kombinationsfeldern lassen sich Fehleingaben wirksam verhindern, da nur vorgegebene Werte zugelassen sind.
selbst_Werte_in_die_Liste_eingeben». Ein Klick auf «Weiter» führt uns zur nächsten Dialoxbox, und hier tragen wir die drei erwähnten Wörter «Kunde», «Lieferant» und «Interessent» jeweils in einem eigenen Tabellenfeld ein - zum jeweils nächsten Tabellenfeld springen Sie hier am besten mit der Tabulator-Taste! Ein Klick auf «Weiter» bringt uns zur nächsten Dialogbox, und hier wählen wir «Wert_speichern_in_Feld» und anschliessend in der Pulldown-Liste gleich nebenan suchen wir aus den zur Verfügung stehenden Datenbankfeldern den Wert «Kontakt»! Was haben wir damit bewirkt: Der jeweils im hinzugefügten Kombinationsfeld gewählte Wert wird in das Datenbankfeld «Kontakt» übernommen- und das ist ja genau das, was wir eigentlich wollten!
Aussagekräftige Namen Nachdem wir ein weiteres Mal auf «Weiter» geklickt haben, fordert Access uns auf, dem Kombinationsfeld noch einen Namen zuzuweisen – klicken Sie hier nicht einfach auf «Weiter», sondern vergeben Sie hier wirklich einen Namen, der Sie auch später und aus anderen Teilen der Datenbank heraus an seine Funktion erinnert! Für unsere Datenbank wählen wir hier «Adress_Eingabe_Selektion_Kontakt». Nun können wir diese Dialogbox mit «Fertigstellen» schliessen und befinden uns wieder im Entwurfsmodus der «Adress_Eingabe»-Maske.
Max Geissbühler
Windows-Ecke datenbanken
Schnelle Umschaltung zwischen Definitions- und Eingabemodus
Windows Ecke Ende letzten Jahres haben wir Sie in einer Umfrage aufgefordert, Themen für die Windows-Ecke zu nennen. Wie sich darin herausgestellt hat, besteht ein breiter Bedarf nach einem Datenbank-Kurs. Dabei scheinen Grundlagen ein echtes Bedürfnis zu sein – dies im Gegensatz zu Applikationen wie Word oder Excel, wo sich doch eher Fortgeschrittene zusätzliche Tips und Tricks wünschen. Halt – etwas haben wir noch vergessen! Damit Access nur genau die Einträge zulässt, die wir in der Liste vorgegeben haben, müssen wir nicht zugelassene Einträge sperren! Wir klicken also mit der rechten Maustaste auf das soeben erstellte Kombinationsfeld und wählen Eigenschaften. Nun ändern wir in der Registerkarte «Daten» den Wert von «Nur_Listeneinträge» auf «Ja» und schliessen die Dialogbox wieder! Wechseln zwischen Definitions-… Da wir Access angewiesen haben, den selektierten Wert des Kombinationsfeldes in der Datentabelle unter Kontakt zu speichern, können wir also das bisherige Feld «Kontakt» löschen, indem wir es mit einem Mausklick anwählen und anschliessend die DEL-Taste betätigen. Tun wir dies nicht, wird uns die Eingabemaske stets 2
MegaLink 2/97
Access on Data (8) einen Doppeleintrag anzeigen nämlich denjenigen im Feld «Kontakt» und den im Kombinationsfeld! Machen wir uns also das Leben nicht schwerer, als es ohnehin schon ist, und löschen wir einfach das Feld. Ebenfalls löschen wollen wir in dieser Maske noch das Feld «ID», da Access den Zählwert sowieso selbständig jeweils um 1 erhöht und wir hier eh nichts eingeben können, denn dieser Wert lässt sich durch den Benützer nicht verändern. Zudem steht der Cursor beim Aufruf der Maske in diesem Feld, und wir sind nur zu einem an und für sich unnötigen Tastendruck gezwungen.
und sie sind diesem Problem effizient und einfach begegnet! … und Eingabemodus Wenn Sie sich beispielsweise im Dateneingabemodus eines Formulares befinden, sehen Sie ganz oben links in der Standard-Symbolleiste eine Schaltfläche mit dem Symbol von Konstruktionswerkzeugen (Lineal, Geo-Dreieck und Bleistift). Klicken Sie auf diese Schaltfläche, und sofort befinden Sie sich im Definitionsmodus. Wie Sie wieder in den Dateneingabemodus zurückfinden, wollen wir an dieser Stelle nicht vollständig verraten – nur
Bis hin zum Kombinationsfeld ändert sich an der Dateneingabe überhaupt nichts, sobald der Cursor aber in das neu hinzugefügte Kombinationsfeld hineinspringt, haben wir völlig neues Feeling. Das Feld kann auch auf zwei verschiedene Arten genutzt werden: Wenn wir die ersten Buchstaben des Wortes «Kunde» schreiben, ergänzt Access die fehlenden Buchstaben, und wir müssen das Wort nur soweit ausschreiben, bis es in der Liste eindeutig identifiziert ist. Ein anschliessendes Drücken der EnterTaste übernimmt den Wert sofort in die zugrundeliegende Datentabelle. Alternativ dazu können wir natürlich mit der Maus oder mit den Cursor-Tasten den gewünschten Wert suchen, wobei wir hier vorläufig nur die 4 vorgegebenen Werte zur Verfügung haben! Fehleingaben eliminiert
Vier – wir haben aber doch nur 3 definiert! Nein, natürlich steht es uns auch frei, das Feld leer zu lassen. Ein Druck auf die Enter-Taste Mit einem Klick auf die Schaltfläche links oben in der Symbolleiste können Sie schnell und übernimmt auch hier einfach zwischen dem Datenbanken-Definitions- und dem Dateneingabemodus umschalten. wiederum den Wert sofort in die Tabelle! Ist es Ihnen auch schon aufge- soviel: Klicken Sie noch einmal In beiden Fällen sind Fehleinfallen, dass es relativ mühsam ist, auf dieselbe Schaltfläche! gaben durch Tippfehler ausgezwischen dem Definitionsfenster Wenn wir soweit sind, wech- schlossen, und wenn uns nun ein von Tabellen und Formularen – seln wir – wie gerade eben be- Geschäft durch die Lappen geht, und natürlich auch Berichten, Ma- schrieben – vom Bearbeitungs- liegt es nicht mehr an der unzukros, Modulen oder Abfragen – in den Eingabemodus und geben reichenden Absicherung des Felund dem Dateneingabe-Modus zu einen neuen Datensatz ein, um des «Kontakte» im «Adress_Einwechseln! Das haben wahrschein- die neu hinzugefügte Benutzer- gabe»-Formular! lich vor uns schon die Program- freundlichkeit auch gleich kenMax Geissbühler mierer von Access selbst festgestellt, nenzulernen!
Windows-Ecke datenbanken
Für schnelle Resultate: Abfragen
Windows Ecke Ende letzten Jahres haben wir Sie in einer Umfrage aufgefordert, Themen für die Windows-Ecke zu nennen. Wie sich darin herausgestellt hat, besteht ein breiter Bedarf nach einem Datenbank-Kurs. Dabei scheinen Grundlagen ein echtes Bedürfnis zu sein – dies im Gegensatz zu Applikationen wie Word oder Excel, wo sich doch eher Fortgeschrittene zusätzliche Tips und Tricks wünschen. Genau in diesem Moment ruft der Chef an und fragt uns nach den Fortschritten unserer Kundenkartei. Da wir schon so weit sind, können wir Ihn auch gleich beruhigen und versprechen ihm einen Ausdruck der erfassten Adressen in 5 Minuten! Wenn wir aber die Adressen aus unseren Adress-Formularen auf den Printer schicken, benötigen wir zuviel Platz, zuviel Papier und haben zuwenig Übersicht, denn das Formular lässt sich genauso ausdrucken, wie wir es auf dem Bildschirm sehen. Was wir bräuchten, wäre eine Liste...! Wir schliessen also das Formular und kehren zu unserem DCC zurück! Eine Abfrage könnte uns aus unserer misslichen Lage befreien! Hand-Arbeit Wir klicken also auf «Abfrage» «Neu», und sogleich öffnet sich eine Auswahlbox, wo uns ver2
MegaLink 18/99
Access on Data (9) schiedene Abfrage-Assistenten zur Verfügung stehen. Um uns an die Funktionalität von Access zu gewöhnen, verwenden wir an dieser Stelle keinen der automatisierenden Assistenten, sondern wählen «Entwurfsansicht»! Nach «ok» wechselt die Ansicht des Fensters, und wir sehen eine Auswahlbox, die uns alle Tabellen zeigt, die wir zur Verfügung haben, um eine Abfrage zu erstellen! Da wir bisher aber nur eine einzige Tabelle definiert haben, steht uns logischerweise auch nur eine zur Verfügung. Wir selektieren mit einem einfachen Mausklick die Tabelle und klicken anschliessend auf «Hinzufügen» und «Schliessen». Nun sehen wir im oberen Teil eine Box, die sämtliche Feldnamen der Tabelle anzeigt. Diese Namen lassen sich wiederum per «Drag and Drop» in die untere Hälfte des Abfragefensters ziehen – alternativ genügt auch hier wieder ein Doppelklick auf den jeweiligen Feldnamen. Wir tun dies vorerst mit sämtlichen zur Verfügung stehenden Feldnamen und klicken anschliessend auf den Knopf oben links in der Symbolleiste, und sogleich wechselt Access von der Definitions- zur Datenansichtsmaske, die sich wie die zugrundeliegende Datentabelle präsentiert.
ge und schreiben wir in der unteren Hälfte, also dort, wo wir vorhin die Feldnamen (also auch das Feld «Name» hingezogen haben, unter – oder besser: neben – die Bezeichnung «Kriterien» folgenden Filter «Wie ‹Müller›». Dieses Kriterium bewirkt, dass wir nur noch alle Datensätze sehen, die im Feld «Namen» mit «Müller» eingetragen sind. Klicken wir also wieder auf den Definitions-/Datenansicht-Button in der Symbolleiste und kontrollieren, ob der Filter wirklich funktioniert.
Daten-Filter
Platzhalter
Dies ist aber nicht der eigentliche Sinn und Zweck der Abfrage, vielmehr können hier Filter gesetzt werden, die nur noch diejenigen Datensätze anzeigen, die wir sehen wollen – und das können wir mit den Datentabellen nicht. Klicken wir also nochmals zurück zur Definition der Abfra-
Nun stehen uns unter Access auch die unterschiedlichsten «Platzhalter» für Filterfunktionen zur Verfügung! Geben wir beispielsweise «Wie M*er» ein, dann zeigt uns die Abfrage alle Datensätze, die im Namen mit «M» beginnen und «er» enden – wenn wir also «Müller», «Meier», «Muster» eingetragen haben,
Abfragen helfen auf einfache und schnelle Art, mit Platzhaltern (Wildcards) sowie «UND», «ODER» und «NICHT» nur die gewünschten Daten aus der Datentabelle rauszufiltern!
dann werden diese auch alle angezeigt. Definieren wir hingegen die Abfrage als «Wie M???er», dann sucht Access nach Namen, die mit «M» beginnen, dann genau 3 beliebige Zeichen folgen und am Schluss mit «er» aufhören. Nehmen wir wiederum an, wir hätten die 3 vorliegenden Namen in der Datenbank eingetragen, welche würden dann wohl in der Abfrage noch angezeigt – Richtig: Nur noch «Müller» und «Muster», «Meier» fällt aus dem Rennen, weil wir Access angewiesen haben, nur Namen mit genau 3 Zeichen zwischen «M» und «er» anzuzeigen. Natürlich lassen sich die Kriterien über mehrere Feldnamen auch mit «und» verknüpfen, zudem stehen «oder» und «nicht» zur Verfügung. Wir wollen uns aber an dieser Stelle vorerst mit dem Gelernten begnügen, Rom wurde ja auch nicht an einem Tage erschaffen...! Max Geissbühler
Windows-Ecke datenbanken
Für den Chef: Berichte
Windows Ecke
Access on Data (10)
Ende letzten Jahres haben wir Sie in einer Umfrage aufgefordert, Themen für die Windows-Ecke zu nennen. Wie sich darin herausgestellt hat, besteht ein breiter Bedarf nach einem Datenbank-Kurs. Dabei scheinen Grundlagen ein echtes Bedürfnis zu sein – dies im Gegensatz zu Applikationen wie Word oder Excel, wo sich doch eher Fortgeschrittene zusätzliche Tips und Tricks wünschen.
Um unserem Chef also die erste Liste präsentieren zu können, sortieren wir diese aufsteigend nach Namen, wechseln in die Datenansicht und klicken auf «Datei/Drucken». Und bereits nach kurzer Zeit haben wir die Liste zu Papier gebracht und bringen diese – nicht ohne Stolz – in sein Büro! Der gestrenge Herr Chef nickt anerkennend, drückt uns aber die Liste mit der Bemerkung in die Hand, dass dies wohl «Mega» sei, nur sollten wir das Layout noch ein wenig überarbeiten – diese Liste werde er heute nachmittag an der Vertreterkonferenz den Aussendienstmitarbeitern zur Verfügung stellen.
Eine andere, wichtige Funktion von Abfragen ist die auf- oder absteigende Sortierung nach jedem Kriterium! Sehen Sie sich die Abfrage in der Definitionsansicht einmal genau an, dann entdecken Sie links aussen den Begriff «Sortierung». Gehen Sie anschliessend in dieser Zeile unter jenes Feld, nach dem Ihre Abfrage sortiert werden soll, und klicken Sie einmal mit dem Mauszeiger. Nun öffnet sich ein Pulldown-Menü, das die Begriffe «Aufsteigend», «Absteigend», «Nicht sortiert» anzeigt, wählen Sie hier den entsprechenden Begriff!
Zurück im Büro sehen wir uns vor einem Problem – denn das Layout lässt sich in Abfragen bis auf Spaltenbreite und -höhe nicht gross verbessern! Fast ein wenig verzweifelt schliessen wir die Abfrage, nicht ohne ihr natürlich noch den Namen «Sortiert nach Name» zu vergeben, nachdem uns Access freundlicherweise darauf aufmerksam gemacht hat...! Da fällt unser Blick im DCC auf die Registerkarte «Berichte», und neugierig klicken wir einmal darauf! Auch hier finden wir wieder einen Button mit der Bezeichnung «Neu», ein Klick darauf öffnet auch hier ein Fenster, das uns Assistenten zur Verfügung stellt. Da die Zeit doch nun zu drängen beginnt, selektieren wir den «Berichtssssistenten» und im Listenfeld unter den Assistenten wählen wir gleichzeitig noch aus, von welcher Grundlage wir ausgehen, um diesen Bericht zu erstellen. Wir wählen hier also gleich den Namen unserer vorher erstellten Abfrage und klicken auf «Weiter»!
Unterschiedliche Kriterien Wir können auch gleichzeitig nach mehreren Kriterien sortieren, hier wird die Spaltenreihenfolge entscheidend – zuerst wird nach der ersten Spalte sortiert, anschliessend wird die zweite Spalte sortiert, wobei die Reihenfolge der vorhergehenden Spalte erhalten bleibt usw.! 2
MegaLink 2/97
Berichte
Berichte eignen sich hervorragend, um Daten aus Abfragen oder direkt aus Tabellen sortiert darzustellen!
Nun stellt uns der Berichtsassistent alle Felder zur Verfügung, die wir in die Abfrage hineingestellt haben. Wir ziehen jeden Feldnamen ausser den mit «ID» bezeichneten aus der linken Liste in die rechte und klicken ein weiteres Mal auf «Weiter» Gruppierungen Jetzt möchte der Assistent von Access wissen, ob wir irgendwelche Gruppierungsebenen hinzufügen möchten!? Natürlich möchten wir das, denn die Einträge in unserer Datenbank haben wir ja bereits in Gruppen eingeteilt (Lieferant, Kunde, Interessent) und unseren Bericht hätten wir deshalb auch gerne nach diesen Gruppen auf Papier, dazu genügt ein Doppelklick auf den Feldnamen «Kontakt». Ein weiterer Klick auf «Weiter» führt uns zu einem Dialog, wo wir noch angeben können, nach welchen Kriterien wir denn unseren Bericht sortieren möchten – dies haben wir aber bereits in der – diesem Bericht zugrundeliegenden – Abfrage vorgenommen, und deshalb
klicken wir hier einfach auf «Weiter»! Layout anpassen Nun wenden wir uns schon dem Layout des Berichtes zu, denn jetzt fragt der Access-Assistent nach dem Aussehen des Berichtes - wir wählen hier mal «Abgestuft» und «Querformat», und ein weiterer Klick auf «Weiter» bringt uns zu den Stilvorlagen. Hier können wir das Aussehen der Schriften, der Linien usw. in Grenzen beeinflussen, wählen Sie hier einfach mal, was Ihnen gefällt – Access zeigt in einem Fenster, wie das zukünftige Formular aussehen könnte! Nach einem weiteren «Weiter» schreiben wir als Berichtsname «Lieferanten/Kundenund Interessenten-Liste», selektieren «Berichtsvorschau öffnen», und nach einem Klick auf «Fertigstellen» öffnet Access eine perfekte Liste, die wir auch gleich ausdrucken und unserem Chef ins Büro bringen, der sie nach einem anerkennenden Blick sorgfältig einpackt und sich auf den Weg zu seinem Meeting macht! Max Geissbühler
INFORMATIK access-kurs
Tabellen aufteilen
Access on Data (XI) In den vorhergehenden Folgen unseres AccessKurses haben wir einfach mal drauflos-designet und bereits ansprechende Resultate erzielt. Für den Hausgebrauch lässt sich so eine moderne Karteikarten-Sammlung problemlos gebrauchen und es macht auch keinen grossen Sinn, wegen der geringen Datenmenge redundante Daten verhindern zu wollen. Ganz anders hingegen sieht es aus, wenn wir eine Datensammlung im Geschäftsbereich anlegen! Ein Beispiel soll aufzeigen, wie wir mit der Aufteilung von Daten auf mehrere Tabellen eine Menge Platz und gleichzeitig Zeit sparen und zudem erst noch weniger Fehler produzieren! Nehmen wir an, in unserer Kontakt-Datenbank erfassen wir zu jeder Adresse die Postleitzahl und die Ortschaft. Nehmen wir weiter an, unser potenzieller Kundenstamm umfasse rund 10% der Schweizer Bevölkerung oder rund 300 000 Haushaltungen. Somit erfassen wir rund 300 000 mal eine Postleitzahl und ebenso viele Ortschaften. Das Schweizer Postleitzahlenverzeichnis hat aber einen Umfang von nur rund 5000 Einträgen und somit schreiben und speichern wir rund die 60fache Menge an Daten, die wir grundsätzlich benötigen würden! Mit einem relationalen Datenbanksystem hingegen erfassen wir die Daten nur einmal, in2
MegaLink 5/2000
Solche Tabellen wollen wir in Zukunft nicht mehr sehen – beachten Sie beispielsweise die 1. Spalte! Hier werden Daten redundant – also mehrfach – gespeichert, dies ist fehlerträchtig und zudem mit einem relationalen Datenbanksystem wie Access nicht nötig.
dem wir die Tabellen aufteilen und dafür Beziehungen definieren.
Wann werden Tabellen aufgeteilt Es gibt jede Menge Literatur, die sich mit relationalen Datenbanken und deren Design befasst. Und in diesen Büchern, Leitfaden, Broschüren, steht stets auch irgend etwas zur Theorie des Aufteilens von Datenbanken in zwei oder mehrere Tabellen, wobei sich doch die Ansicht durchsetzt, dass eine Datenbank stets in jene Tabellen aufzuteilen sei, die in eine 1:n-Beziehung (Erläuterungen dazu später) münden. Diese Theorie ist aber nicht immer richtig, und der Datenbank-Designer muss selber entscheiden, ob und wann er eine Tabelle aufteilen will. Wie wir in unserem Beispiel gleich sehen werden, müssten wir – wenn wir uns streng an diese Regel halten würden – sogar das Schweizer
Postleitzahlen-Verzeichnis in zwei Tabellen aufteilen – denn es gibt tatsächlich einzelne Postleitzahlen, die zwei Ortschaften entsprechen (z.B. 3425 für Koppigen und Willadingen oder 3457 für Wasen und Kurzenei). Der Autor hingegen bevorzugt eine Aufteilung in Tabellen, die je Daten enthalten, die für sich selbst gesehen einen Sinn ergeben. Diese Theorie sei hier anhand eines Beispiels erklärt: Nehmen wir an, wir hätten eine Videodatenbank. In dieser ist neben Länge, Titel, Regie, Hauptdarstellern und weiteren Schauspielern auch eine selbst verfasste Kritik in Worten gespeichert. Gemäss der ersteren Theorie würden diese Daten in einer einzigen Tabelle gespeichert, da die Kritik von Film zu Film unterschiedlich ausfallen dürfte und keine genau wie die andere lautet. Trotzdem würde es Sinn machen, diese Datenbank in zwei
Teile aufzuteilen, denn wir speichern hier ja zwei unterschiedliche Sachen: Einerseits nämlich beweisbare Tatsachen (Titel, Schauspieler, Regie, Länge) und andererseits subjektive und je nach persönlichem Gutdünken gefärbte Aussagen, die zudem für sich alleine stehend auch einen Sinn ergeben! Man kann jetzt einwenden, dass zu jeder Filmkritik auch der Name des Filmes gehört – das mag ja stimmen, aber wenn die Beschreibung des Filmes entsprechend abgefasst ist, kann sie durchaus für sich alleine stehen. Auf der anderen Seite ergibt der Name des Filmes mit Schauspielern und Regisseur durchaus eine aussagekräftige Datei, auch ohne die Kritik!
Aufteilen in der Praxis Wir wollen uns aber hier nicht mit der Theorie, sondern mit der Praxis von Datenbanken befassen und überlegen uns deshalb, ob
INFORMATIK access-kurs
und wie wir unsere bisher erstellte Datenbank sinnvoll in mehreren Tabellen unterbringen – sprich optimieren – können! Beginnen wir also mit der «Anrede» – hier eröffnet sich gleich ein erstes Potenzial, denn 300 000-mal «Herrn», «Frau» oder «Familie» auf Anhieb fehlerfrei schreiben zu können, ist ziemlich unwahrscheinlich, also verbirgt sich dahinter ein nicht zu unterschätzendes Fehlerpotenzial! Zudem stellen 300 000-mal 5 Zeichen eine Datenmenge von 1,2 MByte dar, und das ist auch in der heutigen Zeit nicht wenig – weniger um es zu speichern, denn Festplattenkapazität gibts in rauhen Mengen zu günstigsten Preisen (Preis pro MByte: 1991 rund 13 Franken/1999 knapp 0,02 Franken). Wenn wir aber eine Datenbank durchsuchen und der Rechner die Daten
vergleicht und sortiert, dann dauert jedes MByte seine Zeit. An dieser Stelle könnte man auf die Idee kommen und ein Listenfeld mit dem in Teil 9 dieses Kurses erwähnten Komfort benützen wollen! Dies ist eine durchaus gangbare Lösung, auf jeden Fall verhindert sie Fehleingaben. Nicht verhindert haben wir damit aber die redundante Speicherung von Daten, denn jedes Mal, wenn wir mit der Methode der Listenfelder einen Begriff übernehmen, wird er auch physisch in der Tabelle gespeichert! Viel effizienter wäre es hingegen, wenn wir in einer separaten Tabelle ein Ersatzzeichen für jeden Begriff definieren würden – also beispielsweise eine «1» für «Herrn», eine «2» für «Dame», eine «3» für «Familie»! Anschliessend tragen wir (oder noch bes-
ser – Access) anstelle des Begriffes nur noch eine Zahl in die Haupt-Datentabelle ein und stellen eine Verbindung (relation) zwischen diesen Tabellen her!
Das Geheimnis gelüftet Überlegen wir noch einmal in Ruhe das eben Gesagte – denn dies ist eigentlich bereits das ganze Geheimnis relationaler Datenbanken! Mehrfach zu verwendende Daten erfassen wir nur einmal in einer separaten Tabelle und verweisen über ein eindeutiges Zeichen in der Datentabelle auf diesen Eintrag. Max Geissbühler
MegaLink 5/2000
3
INFORMATIK access-kurs
Beziehungen definieren
Access on Data (XII) In der letzten Folge unseres Access-Kurses haben wir uns überlegt und herausgefunden, wie wir redundante Daten in Tabellen verhindern können. Die logische Erklärung lautet: Tabellen aufteilen und mit einem Ersatzzeichen auf den Eintrag verweisen! Als eindeutiges Zeichen verwenden wir am besten eine Zahl – wir können dies zwar auch mit alphanumerischen Zeichen bzw. Zeichenfolgen tun, dies ist aber in den wenigsten Fällen sinnvoll und die Generierung dieser Zeichenkombination stellt uns auch vor eine nicht immer einfach zu lösende Aufgabe!
Primärschlüssel als eindeutiges Zeichen . . . Erinnern Sie sich noch an Folge 4 (Absatz «Primärschlüssel») – dort hat uns Access bei der Definition der Tabelle darauf aufmerksam gemacht, dass wir vergessen hätten, ein Primärschlüsselfeld zu definieren. Wir haben anschliessend Access angewiesen, diesen Primärschlüssel selbst zu definieren, und in der Folge hat Access automatisch bei jedem neuen Datensatz die Zahl in diesem Feld um 1 erhöht. Zudem haben wir festgestellt, dass wir diese Zahl nicht verändern können. Diesen Effekt kann man nun wunderbar dazu benützen, einen eindeutigen Wert zu generieren. Stellen wir uns nun vor unserem geistigen Auge eine Datenbank vor, die aus zwei Tabellen besteht – in der ersten Tabelle steht in der ersten Zeile im Feld «Primärschlüssel» eine «1», im Feld «Anrede» der Eintrag «Herrn», in der zweiten Zeile unter «Primärschlüssel» eine «2» und unter «Anrede» der Eintrag «Frau» usw.! In der zweiten Tabelle haben wir ebenfalls neben Namen, Vornamen, Strasse, PLZ und Ort noch 2
MegaLink 6/2000
ein weiteres Feld mit der Bezeichnung «Anrede». In diesem Feld steht aber nun nicht mehr «Herrn» oder «Frau», sondern nur noch eine «1» oder eine «2» usw., und diese Zahl repräsentiert den Begriff mit dem entsprechenden Schlüsselfeldeintrag aus der ersten Tabelle, also z. B. 1, Hans, Müller, Sonnenfeldstrasse 2, 5000, Aarau 2, I., Schaffner, Lagerstrasse 15, 8300, Auenwald 1, H., Wagenrad, Meisterallee 2c, 3400, Burgdorf 3, F., Gerster, Neherweg 15, 8325, Urdorf Findige Köpfe haben jetzt bereits herausgefunden, dass im ersten Datensatz für die Zahl «1» der Begriff «Herrn» einzusetzen ist, für den zweiten Datensatz der Begriff «Frau», für den dritten Datensatz wieder «Herrn» und für den vierten Satz dann eben «Familie». Das was wir uns jetzt im Kopf ausgedacht haben, das kann Access ebenfalls, vorausgesetzt, wir zeigen ihm den richtigen Weg, und deshalb wollen wir analog dem Gesagten unsere bestehende Datenbank in diesem Sinn abändern.
. . . in der Praxis Nachdem wir also Access mit der Datenbank «Kontakte» gestartet haben, wählen wir im DCC die Tabelle «Adresse» im Entwurfsmodus. Wechseln Sie nun im Eintrag «Anrede» den Felddatentyp auf «Zahl» und im Definitionsfeld «Allgemein» unten auf der Seite
Was unter dBase noch einiges an Wissen erforderte, wird in Access mit wenigen Mausklicks erledigt - Beziehungen (Relationen) zwischen Tabellen definieren macht sogar Spass!
als Feldgrösse den Typ «LongInteger» und speichern Sie die Tabelle ab. Access macht Sie sogleich in einer Dialogbox darauf aufmerksam, dass die Einträge nicht mehr zum Datentyp passen – eigentlich logisch, denn «Herrn» oder «Frau» ist ja nicht unbedingt eine Zahl – und deshalb gelöscht werden. In unserem Fall klicken wir hier auf «OK», denn es hat keinen Sinn, die Daten noch weiter speichern zu wollen und damit schliesst sich dieses Tabellen-Definitionsfenster! Nun erzeugen wir eine neue Tabelle, diese hat nur zwei Einträge. Als erstes erstellen wir ein Schlüsselfeld, das automatisch für jeden Datensatz einen eindeutigen Eintrag erstellen. Zu diesem Zweck schreiben wir in die erste Zeile den Begriff «Schlüsselfeld», als Felddatentyp wählen wir «AutoWert», und ganz unten auf der Seite wählen wir bei «Indiziert» den Begriff «ja/ohne Duplikate». Nun müssen wir Access noch sagen, dass wir dieses Feld als Schlüsselfeld verwenden wollen, ansonsten Access uns beim Abspeichern wieder auf einen Fehler auf-
merksam machen würde! Dazu gehen wir wie folgt vor: Selektieren Sie die ganze Zeile und klicken Sie auf das Schlüsselsymbolfeld in der Standard-Symbolleiste. Sofort erscheint ganz vorne in der selektierten Zeile ein Schlüsselsymbol, das uns zeigt, dass dies das Schlüsselfeld in dieser Tabelle ist. Erstellen Sie nun ein weiteres Textfeld mit dem Namen «Anrede» mit einer Länge von 40 Zeichen und speichern Sie die Tabelle anschliessend unter dem Namen «Anrede» ab. Was haben wir mit dem Erstellen dieser Tabelle erreicht!? Wir haben ein Gefäss geschaffen, das alle Anredeformen aufnehmen kann, die wir für unsere Adresstabelle benötigen. Gleichzeitig erhält jede Anredeform mit der Zahl aus dem Schlüsselfeld einen eindeutigen Bezeichner, den wir in der Adresstabelle speichern können.
Beziehungen definieren Was wir nun noch tun sollten, ist eine Beziehung zwischen den beiden Tabellen definieren – dies ist in Access nicht zwingend notwendig, kann aber für komple-
INFORMATIK access-kurd
xere Anwendungen wie auch für einfache Abfragedefinitionen eine entscheidende Hilfestellung sein. Und da es zudem in Access Spass macht, solche Beziehungen zu definieren, wollen wir uns dies an dieser Stelle gleich mal zusammen ansehen. Klicken Sie im Menü auf «Extras/Beziehungen», selektieren Sie in der Liste die beiden Tabellen «Anrede» und «Adresse» und klicken Sie anschliessend auf «Hinzufügen». Nun stehen die beiden Tabellen im Fenster, und wir dirigieren den Mauszeiger über den Begriff «Schlüsselfeld», ziehen ihn mit der linken Maustaste auf den Begriff «Anrede» der Adresstabelle und lassen ihn fallen (Maustaste loslassen). Sofort öffnet sich eine Dialogbox mit der Bezeichnung «Beziehungen». Falls nichts schief gelaufen ist, sollte hier in der Spalte «Tabelle/Abfrage» der
Name des Feldes «Schlüsselfeld» aus der Tabelle «Anrede» eingetragen sein, in der anderen Spalte befindet ist der Name «Anrede» aus der Adresstabelle aufgelistet! Etwas weiter unten in dieser Dialogbox ist eine Checkbox für den Begriff «Mit referentieller Integrität», den wir mit einem Häkchen aktivieren wollen. Sogleich erscheinen auch die beiden unteren Begriffe «Aktualisierungsweitergabe an Detailfeld» und «Löschweitergabe an Detaildatensatz» auch als selektierbar – dies lassen wir aber vorläufig bleiben. Was es mit diesen Begriffen auf sich hat und was mit «referentieller Integrität» gemeint ist, werden wir Ihnen weiter unten in diesem Kapitel erläutern! Schliessen wir nun mit einem Klick auf «Erstellen» diese Dialogbox, und nun sogleich fügt
Access eine Haarlinie zwischen den beiden Einträgen ein und symbolisiert damit eine bestehende Beziehung zwischen den beiden Tabellen.
Beziehungstypen? Betrachten wir nun mal die Enden der Haarlinien – auf der einen Seite bei der Tabelle «Anrede» steht über dem Ende der Beziehungslinie eine 1, auf der anderen Seite erkennen wir eine liegende 8, das mathematische Zeichen für «unendlich». Der Kenner relationaler Datenbanken erkennt hier eine 1:n-Beziehung, was nichts anderes bedeutet, als dass ein (1) Datensatz aus der Tabelle «Anrede» mehreren (genauer gesagt: unendlich vielen und damit n) Datensätzen aus der Tabelle «Adresse» zugewiesen sein kann. Max Geissbühler
184x130
MegaLink 6/2000
3
INFORMATIK access-kurs
1:n-Beziehungen
Access on Data (XIII) Wie wir in Folge 12 unseres Access-Kurses festgestellt haben, ist das Setzen von Relationen zwischen Tabellen eine relativ einfache Angelegenheit. Im vorliegenden Teil probieren wir nun mal aus, ob die Praxis hält, was wir uns in der Theorie versprochen haben! Das relationale Datenbanksystem kennt zusätzlich noch die Beziehungen 1:1 – hier entspricht ein Datensatz aus einer Tabelle genau einem Datensatz in einer anderen Tabelle – sowie die n:mBeziehungen (hier entsprechen mehrere Datensätze einer Tabelle gleich mehreren Datensätzen einer anderen Tabelle)! Allerdings kennt Access die n:m-Beziehung nicht bzw. sie muss mit dem Umweg über eine dritte Tabelle in in zwei 1:n-Beziehungen aufgelöst werden. Das alles tönt jetzt relativ theoretisch, und wir werden auf diese Beziehungsformen später noch zu sprechen kommen.
Die 1:n-Beziehung Wir widmen uns hier aber vorerst der 1:n-Beziehung und wollen mal austesten, ob das Ganze überhaupt funktioniert! Um die Möglichkeit zu haben, auszutesten ob es funktioniert, benötigen wir die Anredeformen – wir füllen also einmal die Tabelle «Anrede» mit den Begriffen «Herrn», «Frau» und «Familie». Dazu generieren wir für diese Tabelle ein Formular, obwohl wir natürlich auch direkt in die Tabelle schreiben könnten. Dieses Formular werden wir aber später noch benötigen, und deshalb erstellen wir es an dieser Stelle genauso, 42
MegaLink 7/2000
In unserem Fall sichern wir uns mit einem Kombinationsfeld vor Fehleingaben und stellen gleichzeitig die Verbindung der Daten zwischen den Feldern der beiden Tabellen her!
wie wir dies in Folge 5 bereits mal durchexerziert haben. Dazu schliessen wir das Fenster «Beziehungen», akzeptieren die Änderungen mit «OK» und wechseln im DCC auf die Registerkarte «Formular». Hier klicken wir auf «Neu», anschliessend wählen wir «Autoformular:einspaltig», wählen im Listenfeld die Tabelle «Anrede» und klicken auf «OK». Praktisch unverzüglich erscheint ein Formular in das wir die 3 Begriffe eintragen. Dabei werden Sie auch feststellen, dass in das Feld «Schlüsselfeld» nichts eingegeben werden kann. Nun benötigen wir ein Formular für die Adressetabelle, das wir auf dieselbe Weise erstellen – sobald wir damit fertig sind und das fertige Formular vor uns steht, sehen wir, dass das Feld «Anrede» keinen Inhalt mehr hat – dies aufgrund der Umwandlung des Textfeldes in ein Zahlenfeld, die wir vorhin durchgeführt haben. Nun tragen wir in dieses Feld die Zahlenwerte ein, die die entsprechenden Werte aus der Tabelle «Anrede» repräsentierten –
also für «Herrn» eine «1», für «Frau» eine «2» und für «Familie» eine «3». Dies ist zwar eine archaische Methode, aber sie funktioniert – und solange wir uns nur die 3 Werte für die Anrede merken müssen, dürfte uns dies nicht schwer fallen!
Und es funktioniert doch Und dass es funktioniert, können wir mit einer Abfrage verifizieren – wechseln Sie also im DCC auf Abfrage, klicken auf «Neu» und «Entwurfsansicht». In der sich öffnenden Selektionsbox wählen wir beide Tabellen aus, indem wir mit gedrückter Ctrl-Taste je einmal auf die hinzuzufügenden Tabellennamen klicken und anschliessend «Hinzufügen» und «Schliessen» wählen. Wie sich unschwer feststellen lässt, sind die beiden Tabellen dank der vorher festgelegten Beziehung schon verbunden und wir müssen hier nichts weiter tun, als von beiden Tabellen die Felder, die uns interessieren, in das Abfragefeld zu ziehen. Uns interessieren hier eigentlich das Feld
«Anrede» aus der gleichnamigen Tabelle sowie alle Felder aus Tabelle «Adresse», ausser das Feld «Anrede» – das brauchen wir nicht, denn es dient bloss der Verbindung mit dem Schlüsselfeld aus Tabelle «Anrede». Sobald wir mit der Definition der Abfrage fertig sind, klicken wir links oben auf den Button für die Umschaltung zwischen dem Entwurfsund Datenansichtsmodus und wenn wir alles richtig gemacht haben, zeigt uns die Abfrage eine Liste mit Anrede, Vorname, Name und Adresse – eigentlich genauso wie wir dies schon in früheren Folgen festgestellt haben, nur mit dem Unterschied, dass Sie soeben eine relationale Datenbank auch richtig ausgenützt haben und mit mehreren venknüpften Tabellen arbeiten.
Irgendetwas fehlt da noch . . . Dass es funktioniert, haben wir nun festgestellt, aber mit der Eingabe der Daten sollten wir eigentlich nicht zufrieden sein! Denn wie bereits erwähnt, kann man die Referenzwerte unserer
Anrede–Tabelle noch problemlos im Kopf behalten. Stellen Sie sich aber einmal vor, Sie hätten vielleicht 20 verschiedene Anredeformen im Kopf zu behalten – denn es gibt ja noch die wildesten Kombinationen wie «Frau Prof. Dr. phil. rer. nat.» und müssten von jeder noch die dazugehörende Referenznummer auswendig wissen . . . ! Aber auch hier bietet Access eine einfache Lösung: Öffnen Sie die Maske «Adresse» im Entwurfsmodus. Nun öffnen Sie die Toolbox – falls diese noch nicht auf dem Bildschirm zu sehen ist – und selektieren Sie ein Kombinationsfeld! Klicken Sie nun mit dem Mauspfeil an der Stelle, wo die Anredeform angezeigt werden soll. Sogleich öffnet sich eine Dialogbox, hier wählen Sie aus mehreren Möglichkeiten den Eintrag: «Das Kombinationsfeld soll die Werte aus einer Tabelle oder Abfrage entnehmen» mit dem Hintergedanken, dass wir ja die Anredeformen aus der Tabelle «Anrede» verwenden wollen. Klicken Sie auf «Weiter» und selektieren Sie die eben besprochene Tabelle, um anschliessend wieder auf «Weiter» zu klicken. Nun klicken Sie auf das Symbol «>>», um beide Felder in der rechten Hälfte darzustellen. Nach einem weiteren Klick auf «Weiter» können Sie ruhig der Empfehlung «Schlüsselspalte ausblenden (empfohlen)» folgen und ein Häckchen setzen – wenn die Schlüsselspalte angezeigt wird, irritiert das bloss in der Adressmaske. Im nächsten Dialogfeld wählen Sie den Punkt «Wert speichern im Feld» und im Kombinationsfeld selektieren Sie den Feldnamen «Anrede» aus der Adressmaske. Nun müssen wir nochmals auf «Weiter» klicken und dem Kombinationsfeld noch einen sinnvollen Namen zuteilen – natürlich können wir auch den vorgegebenen Namen (z. B. Kombinationsfeld20) stehen lassen – aber der Autor ist der Meinung, dass sich bei einer späteren Änderung an der Datenbank aussagekräftige Steuerelementnamen besser zuordnen lassen und damit der Übersicht dienen. Geben wir also unserem Kombinationsfeld den (sinnvollen) Namen «Anrede_Selektion» und schliessen diesen Dialog mit «Fertigstellen» Max Geissbühler ab!
INFORMATIK access-kurs
Automatisieren mit Makros: Grundlagen
Access on Data (XIV) redeform eingeben und speichern können! Dieser Weg ist ziemlich umständlich und es müssten sich doch Wege finden lassen, die so einfach wie auch selbsterklärend – auf gut NeuAnrede ergänzen deutsch: «Logisch und Intuitiv» – Stellen wir uns nun mal vor, was sind! wir tun müssen, um eine weitere Wenn im Selektionsfeld für Anrede zu erfassen! Dazu haben Anrede keine entsprechende wir mehrere Möglichkeiten, die Form gefunden wird, dann wäre wir in der Reihenfolge des Bedie- es beispielsweise «Logisch», dass wir auf einen Button mit der Aufschrift «Neue Anrede erfassen» klicken können, worauf sich das Erfassungsformular für «Anrede» öffnet. Hier erfassen wir dann eine neue Anredeform und kommen automatisch wieder zurück in die Adresserfassungsmaske, wo uns die neue Anrede zur Verfügung steht! Huch . . . das ist aber ein bisschen viel auf einmal und – ja, da muss ein Automatismus her! Und diese Beim Betrachten der beiden Tabellen fällt dem geneigten Leser auf, dass ein Pfeil Automatisierung lässt aus der linken Tabelle zu mehreren Zielen in der rechten Tabelle verzweigen kann sich wunderbar mit dies veranschaulicht auch gleich die 1:n-Beziehung, in der diese beiden Tabellen Makros realisieren! stehen! Kreieren – oder besser: Füllen Sie nun den Rest der nungskomfortes auflisten: Da generieren – wir also für vorlieAdress-Maske auch noch aus und wäre die einfachste – aber auch gendes Problem unser erstes Maschliessen Sie die Erfassungsmas- die unschönste: Wir ergänzen di- kro! ke, wobei natürlich die vorge- rekt die zugrundeliegende Danommenen Änderungen akzep- tentabelle «Anrede». Diese Form Makro on the Fly tiert werden sollten – ansonsten wählen wir, wenn nur in Ausnah- Um einen Ablauf in Access mit wir wieder bei Teil 13 beginnen mefällen eine neue Anredeform Makros zu automatisieren, gibt müssen! Nun wechseln wir im hinzukommt. Gänzlich ungeeig- es grundsätzlich 2 verschiedene DCC zu den Tabellen, denn wir net ist diese Art der Dateneinga- Wege – die erste, schnelle und wollen uns doch mal genauer an- be für Access-Ungeübte, also für eher für fortgeschrittene Anwensehen, was wir da eben gemacht Personen, die nur sporadisch mit der geeignete Methode besteht haben! Öffnen Sie also die Tabel- Access arbeiten. darin, das Makro zu schreiben le «Adresse» und beachten Sie Etwas komfortabler geht es und dieses anschliessend an ein vor allem den eben erfassten Da- mit dem Formular aus der vor- Objekt oder ein Steuerelement tensatz! Wenn alles richtig ge- hergehenden Folge, wobei wir zu binden! Der zweite – etwas laufen ist, steht jetzt im Feld «An- natürlich dieses Formular jedes mühsamere, aber praktisch selbstrede» eine Zahl – und zwar dieje- Mal im DCC von Hand aufrufen erklärende und einfachere – und nige, die im Schlüsselfeld des müssen, bevor wir eine neue An- vor allem auch für Anfänger bes-
In Folge 13 unseres Access-Kurses haben wir ein Kombinationsfeld kreiert, das Werte aus einer Tabelle holt und – wenigstens visuell – in eineranderen Tabelle einträgt, dabei aber bloss eine Verknüpfung zwischen den beiden Datensätzen erzeugt. Wir erfassen also bestimmte, immer wiederkehrende Feldinhalte in der einen Tabelle und verknüpfen diesen Feldinhalt mit einem Datensatz aus einer weiteren Tabelle! Nun – so nach den Ferien und vollständig ausgeruht und beim Tippen völlig aus der Übung wollen wir mal schauen, ob unser Kombinationsfeld seinen Zweck erfüllt – dazu wechseln wir vom Definitions- in den Datenerfassungsmodus. Nun steht der Cursor in Feld «Vorname» – wollen wir das? Nein, als erstes erfassen wir bei einer Adresse doch die Anrede – also zurück in den Definitionsmodus. Unter «Ansicht/Aktivierreihenfolge» klicken wir auf «Anredeselektion» und ziehen diesen Eintrag ganz nach oben in die Liste, indem wir ein zweites mal auf das graue Kästchen klicken, die Maustaste festhalten, an die erste Stelle dieser Liste fahren und die Maustaste wieder loslassen! In Zukunft wird der Cursor – wenn wir in dieses Formular reinkommen – im Feld Anredeselektion stehen. Zurück im Datenerfassungsmodus klicken wir auf den Pfeil am rechten Ende des AnredeKombinationsfeldes und sogleich öffnet sich ein Pull-Down-Menü, das uns die ersten 8 Einträge (wenn wir bereits so viele erfasst haben) der Anrede-Tabelle zeigt. Wenn wir jetzt beispielsweise den Eintrag «Frau» auswählen, schliesst sich das Pull-DownMenü wieder und im sichtbaren Teil des Kombinationsfeldes wird der ausgewählte Eintrag sichtbar! 62
MegaLink 8/2000
entsprechenden Eintrages in der Anrede-Tabelle steht! Na – hat’s geklappt – ansonsten beginnen wir auch an dieser Stelle wieder bei Teil 13 . . . !
ser geeignete Weg: Wir erstellen das Makro, indem wir den Ablauf Schritt für Schritt durchgehen und jeweils an der entsprechenden Stelle den Automatismus generieren. Doch bevor wir beginnen, hier noch etwas Grundsätzliches zu Access-Makros: Wir haben die Möglichkeit, für jedes Makro im Makroeditor einen Namen zu vergeben und zu speichern oder aber, Makros die beispielsweise zu einem bestimmten Formular gehören oder gleichartige Funktionen ausführen, zusammenfassen. Für die ersten Schritte und auch des besseren Verständnis wegen – Makros, die zusammengefasst werden, erhalten zusätzlich zum Makronamen noch eine weitere Bezeichnung – generieren wir vorerst ganz einfache Makros, später aber werden wir sie vor allem der besseren Übersicht wegen zusammenfassen.
One way ticket? Viele von Ihnen werden sich sicher fragen, wieweit die Programmierung von Access mit Makros ein Schritt in die falsche Richtung ist – seien Sie beruhigt! Das Erstellen von Makros ist hier keineswegs eine Sackgasse – den zweitens lassen sich (fast) alle Problemstellungen in Access mittels Makros lösen, drittens sind Makros – wenigstens diejenigen, die wir hier verwenden – nur unmerklich langsamer als VBAProgrammierte Routinen. Und erstens (verzeihen Sie die etwas eigenartige Nummerierung – aber sie hat durchaus ihre Berechtigung) stellt Access selbst eine Möglichkeit bereit, generierte Makros in VBA-Code umzuwandeln! Wenn Sie also später als richtiger Access-Profi Ihre Anwendungen optimieren wollen, ist die Arbeit, die Sie jetzt für Makros aufwenden, alles andere als für die Katze. Mit zwei, drei Mausklicks haben Sie im Bedarfsfall ihre Anwendung umgestellt. Nicht zuletzt ist dieses Feature mitverantwortlich für den Siegeszug, den Access in den letzten Jahren gegenüber allen anderen Datenbanken in seinem und wesentlich höher angesiedelten Preissegmenten vollzogen hat. Max Geissbühler
MegaLink 1/2000
63
INFORMATIK access-kurs
Automatisieren mit Makros
Access on Data (XV) Nun werden wir langsam anspruchsvoll, es genügt uns nicht mehr, Daten speichern und wieder abrufen zu können. Nein, wir wollen Komfort, und zwar unbeschränkten! Aber warum auch sollten wir uns mit Routine-Arbeiten beschäftigen und Formulare öffnen und schliessen und wieder öffnen, wenn uns Access dies sozusagen auf Knopfdruck abnehmen will! Vor dem Preis steht aber nach wie vor der Fleiss...! . . . und aus diesem Grund machen wir uns an die Arbeit und automatisieren den Ablauf, um aus der Adressmaske heraus die Anredeform-Ergänzungsmaske aufzurufen, hier die neue Anredeform einzugeben und anschliessend wieder in der Adresseingabemaske zu landen. Und als Dreingabe – sozusagen als «Bonus» – möchten wir natürlich, dass die eben erfasste Anredeform bereits in der Adresseingabemaske eingefügt ist, wenn wir wieder zurück sind! Wie in der letzten Folge erwähnt, gehen wir dabei nach der Schritt-für-Schritt-Methode vor, beginnen also im Formular «Adress-Eingabe». Wir möchten also eine neue Anredeform eingeben und wünschen uns dazu direkt neben dem Anrede-Selektionsfeld einen Knopf mit der Beschriftung «Neue Anredeform», der uns das Formular «Anrede» öffnet. Wir erinnern uns, wenn wir am Design des Formulars etwas ändern wollen, müssen wir in den Entwurfsmodus wechseln – und das tun wir an dieser Stelle! Wie vorhin erwähnt, möchten wir einen Knopf/eine Schaltfläche, der/die uns bei einem Klick das Formular «Anrede» öffnet, damit wir die neue Anredeform eingeben können. Wir klicken also in der Toolbox – wenn sie noch nicht auf dem Bildschirm ist, öffnen wir sie mit dem 62
MegaLink 9/2000
Befehl «Ansicht/Toolbox» – auf das Symbol «Befehlsschaltfläche» und klicken mit dem veränderten Mauszeiger an der Stelle im Formular, wo wir die Schaltfläche wünschen. Sogleich öffnet sich ein Assistent, der uns viel Arbeit abnehmen könnte, da wir aber die Makro-Programmierung kennen lernen möchten, klicken wir hier auf «Abbrechen» und erstellen den gewünschten Programmablauf sozusagen «zu Fuss»!
Ein Ereignis Ein Doppelklick auf den Knopf öffnet die Eigenschaftenliste, die zu dieser Schaltfläche gehört – und diese Eigenschaftenliste ergänzen wir nun mit den notwendigen Parametern, damit sie die gewünschten Funktionen ausführen kann. Die Eigenschaftsliste enthält die Registerkarten «Format», «Daten», «Ereignis», «Andere» und «Alle». Da wir ja mit dem Knopf ein Ereignis (Wechsel zu einer anderen Datenmaske) herbeiführen wollen, wählen wir natürlich die Registerkarte «Ereignis»! Als Kriterien stehen auf dieser Karte nun wiederum verschiedene Punkte zur Verfügung und alle beziehen sich auf die Art der Ansteuerung der Schaltfläche – so lautet beispielsweise der erste Punkt «Beim Hineingehen»! Wir wollen an dieser Stelle nur die beiden ersten Punkte erläutern, da sich die anderen entsprechend
Beachten Sie einmal die Funktionen, die der Makroeditor zur Verfügung stellt. Zudem können aus Makros heraus weitere Makros gestartet werden!
ihrer Beschreibung verhalten. «Beim Hineingehen» bedeutet, genau in dem Moment, wenn die Schaltfläche per Mausklick, per Tabulator, per Enter-Taste oder sonstwie aktiviert wird, führt sie das (noch zu definierende) Makro aus! «Beim Verlassen» hingegen bedeutet, dass die Schaltfläche den Fokus erhalten kann, ohne dass etwas passiert – verlässt aber der Cursor auf irgend eine Art den Knopf, dann wird das Makro ausgeführt. Was es mit dem Fokus auf sich hat und dass es nicht egal ist, wann das Makro ausgeführt wird, das werden wir schon bald anhand unseres Beispiels feststellen! Im vorliegenden Fall ist es ganz klar, dass wir erst auf einen Klick mit der Maus das Makro auch auslösen wollen. Denn es kann ja sein, dass wir in der Hitze des Gefechtes beim Adress-Erfassen mit dem Tabulator auch diese Schaltfläche bedienen, ohne dass wir eine neue Anrede erfassen wollen. Wenn sich dann sinnlos jedesmal die Anrede-Maske öffnen würde und wir sie wieder schliessen müssten, würde dies den Arbeitsfluss wirklich hemmen.
Erster Schritt . . . Wir klicken also auf «Beim Klicken . . .» und sehen in der selben Zeile, rechts aussen zwei Miniatur-Schaltflächen – eine davon ist mit einem kleinen, auf den Kopf gestelltes Dreieck gekennzeichnet, die andere besitzt drei Punkte. Klicken wir auf das Dreieck, können wir auf bereits definierte Makros und Prozeduren zurückgreifen – mangels solcher klicken wir aber einfach auf die 3 Pünktchen. Nun gilt es, zu definieren, was das Makro ausführen soll, wir müssen das aber nicht selber definieren, sondern können auswählen – in der ersten Spalte des Makrodefinitionsfensters mit dem Namen «Aktion» selektieren wir die erste Zeile und suchen im Rollmenü den Befehl «Schliessen», da wir ja die aktuelle Eingabemaske verlassen wollen! Wie gewohnt, können wir unten, im letzten Drittel dieses Fensters weitere Parameter zu der betreffenden Aktion definieren, so ist es beispielsweise möglich, den Namen des Formulars anzugeben, das wir schliessen möchten. Es wäre beispielsweise möglich, eine Abfrage oder eine andere
Datenmaske automatisch schliessen zu lassen. Da wir aber, wenn das Makro mit dem Knopf gestartet wird, nur ein Fenster (die Adress-Erfassungsmaske) offen haben und dieses Fenster dann auch das aktuelle ist, muss hier nichts angeben werden! In der letzten Parameterzeile unter «Speichern» wählen Sie «Nein», denn die Datenmaske enthält keine gültigen Werte, weil wir ja «Anrede» als ersten Punkt einer Adresse gewählt haben und wenn wir eine neue Anredeform definieren wollen, haben wir logischerweise noch keine anderen Werte der Adresse erfasst!
. . . und noch einer! Als weiteren Schritt in unserem Makro müssen wir noch die Anredeform-Eingabemaske aufrufen – also benötigen wir eine Makrofunktion, die ein Formular öffnet! Wir klicken deshalb in die zweite Zeile der Makroaktionen und suchen eine entsprechende Funktion – richtig: «ÖffnenFormular» heisst das Ding! Und nur so ganz nebenbei, beachten Sie während der Suche nach der richtigen Makrofunktion einmal die anderen Funktionen, die der Makroeditor zur Verfügung stellt! Da ist praktisch alles dabei, was das Herz eines Datenbank-Designers begehrt und kombiniert mit Makronamen und Bedingungen lassen sich auch komplexe Datenbanken ohne eine Zeile Programmierung definieren . . . aber bleiben wir vorerst bei unserem kleinen Beispiel – denn wenn das nicht laufen sollte, wird es wohl auch nichts mit grösseren Sachen! Also kurz, die Funktion «ÖffnenFormular» muss noch wissen, welches Formular geöffnet werden soll und das definieren wir wieder unten bei den Parametern oder besser «Aktionsargu-
menten», indem wir einmal in die Zeile «Formularname» klicken und den Namen des «Anrede_erfassen»-Formulares auswählen! Als Ansicht soll das Formular natürlich die Formularansicht haben, wir möchten ja die Anrede nicht einfach in eine Tabelle einfügen, sondern mit etwas Komfort arbeiten. Die nächsten beiden Argumente vergessen wir, da wir keinen Datensatz anzeigen, sondern einen erfassen wollen. Wichtig hingegen ist der nächste Punkt «Datenmodus»! Hier muss der Punkt «Hinzufügen» gewählt werden, wählen wir beispielsweise «Bearbeiten», dann zeigt uns die Anredemaske auch alle bereits vorhandenen Datensätze an, wobei wir diese sogar ändern könnten – das wollen wir aber nicht. Zudem bestünde die Gefahr, dass wir einen bestehenden Datensatz überschreiben. Ebenso falsch wäre natürlich der Begriff «NurLesen», das bedeutet nichts anderes, als dass die vorhandenen Datensätze bloss angezeigt werden, aber weder editierbar sind, noch neue hinzugefügt werden können. Auch der nächste Parameter unter «Fenstermodus» kann unter Umständen interessante Auswirkungen haben – so ist es sinnlos, für unseren Zweck ein «Ausgeblendetes» Formular verwenden zu wollen. Ein PopUp-Fenster kann den Anwender verwirren, da diese Art Fenster sich im Aussehen von den normalen Access-Fenstern unterscheidet und besser nur als Meldungsformular oder Navigationsfenster verwendet wird. Hier lassen wir also den Default-Wert «Normal» stehen.
Beschriftung nicht vergessen Nun – damit wären wir bereits am Ende des ersten Teils der Ma-
krodefinition, denn nachdem Access automatisch das Adress-Erfassungsformular geschlossen und die Anrede-Erfassungsmaske geöffnet hat, ist der Bediener wieder gefragt, hier muss er nämlich wieder selbst in Aktion treten und in der Anrede-Erfassungsmaske die neue Anredeform eingeben! Schliessen wir nun das Makrodefinitions-Fenster. Nun soll die Schaltfläche noch eine sinnvolle Beschriftung erhalten, wir wechseln also an dieser Stelle noch auf die Registerkarte «Alle» und schreiben bei «Name» die Bezeichnung «Startknopf_Anredeform» und bei «Beschriftung» den Begriff «Neue Anredeform».
Funktionskontrolle! Jetzt wechseln wir wieder in den Datenerfassungsmodus und versuchen, einen neuen Datensatz mit einer neuen Anredeform zu generieren. Klicken Sie einmal auf den Knopf «Neue Anredeform» und nun sollte sich das Adresserfassungs-Fenster schliessen – mit der Meldung, dass das Makro noch gespeichert werden muss. Wir taufen unser Makro auf den Namen «Neue Anredeform» und akzeptieren auch die Änderungen an der Adresserfassungsmaske. Diese beiden Abfragen erfolgen nur dieses Mal, bei weiteren Klicks auf diesen Knopf wird sich einfach das Fenster schliessen und fast gleichzeitig erscheint die Anrede-Erfassungsmaske – es scheint also zu klappen und wir tippen nun eine neue Anredeform – z. B. «Frau Prof. Dr. » ein . . . ! Max Geissbühler
INFORMATIK access-kurs
Automatisieren mit Makros (II)
Access on Data (XVI) Nun haben wir es hinter uns – das erste Makro funktioniert (wenigstens beim Autor) und es ist eine Freude, auf einen Knopf zu drücken, statt «Formular schliessen, Formular öffnen, Daten eintragen, Formular schliessen und Formular öffnen» von Hand durchzuexerzieren! Allerdings muss zur Vollständigkeit ein weiteres Makro geschrieben werden, denn das bisherige ist erst die halbe Miete. Wir wollen nämlich die neu erfasste Anredeform ins Adresserfassungsformular transferieren, und zwar ohne weitere unnütze Tastaturund Mausklicks!
In der letzten Folge unserer Windows-Ecke sind wir ja relativ weit gekommen. Wir haben im Adresserfassungsformular auf den Knopf «Neue Anredeform» geklickt und die neue Anredeform erfasst. Und nun sitzen wir hier und möchten, dass die soeben erfasste Anrede auch gleich ins Adresserfassungsformular eingetragen wird! Wie bereits beim letzten Mal vorexerziert, klicken wir uns, während die Anrede-Erfassungsmaske offen ist, in den Designmodus, um das Makro zu definieren. Und auch hier wählen wir nach einem Klick mit der rechten Maustaste ins Feld «Anrede» auf «Eigenschaften» und wählen wiederum die Registerkarte «Ereignis»! Aber da wir nach dem Erfassen der Anrede automatisch und ohne einen weiteren Klick mit der Maus direkt in den Adresserfassungsmodus zurückwollen, wählen wir hier «Nach Aktualisierung». «Nach Aktualisierung» 52
MegaLink 10/2000
Der Ausdruckseditor von Access nimmt uns – wenigstens vorläufig – noch die Arbeit ab, um Ausdrücke in Abfragen, Formularen zu definieren! Hier wartet nämlich noch einiges an Arbeit auf uns...!
bedeutet: Wenn der Datensatz erfasst ist und wir auf die Entertaste gedrückt haben, wird das Makro ausgeführt. Nun müssen wir wiederum den Ablauf definieren und dazu klicken wir wieder auf die Schaltfläche mit den 3 Punkten, worauf sich der Makroeditor öffnet.
Schritt 1 Als ersten Schritt wollen wir mit dem Makro die Adresserfassungsmaske öffnen. Hier gehen wir vorerst wieder vor wie beim letzten Makro – wählen also den Aktionsnamen «ÖffnenFormular» und weisen Access im Argumentenfenster unter «Formularname» die Adresserfassungsmaske zu. «Filter» und «Bedingung» lassen wir leer, da wir weder einen Datensatz anzeigen noch ändern wollen und wählen unter «Datenmodus» den Begriff «Hinzufügen» und den «Fenstermodus» als «Normal»!
. . . etwas Theorie . . .
. . . Schritt 2
Da wir aber einen Wert von einer Datenmaske in eine andere trans ferieren wollen, wird es nun bereits ein wenig komplexer. Wenn wir Daten in ein Feld eintragen, verändern wir den Wert des Feldes. Vereinfacht gesagt, könnte man sagen, ein leeres Feld hat den Wert «Null» und ein Feld mit einem Eintrag enthält einen Wert! Und an dieser Stelle merken Sie sich gleich etwas ganz Wichtiges! Ein Feld mit der Zahl «0» hat NICHT den Wert «Null», es enthält nämlich einen Wert – den Wert «0»! Diese Eigenart wird später noch wichtig werden, wenn Sie beispielsweise eine Abfrage erstellen, die Datensätze mit «leeren» Feldern zeigen soll – wenn Sie nämlich leere Datensätze mit dem Begriff «0» suchen, werden sie wenig Erfolg haben! Diese kurze Exkursion zum «Wert» eines Feldes hat einen bestimmten Grund – sie erklärt den nächsten Schritt unseres Makros!
Denn als nächsten Schritt soll das Makro die soeben erfasste neue Anredeform in die Adresserfassungsmaske transferieren. Und dazu müssen wir den Wert des Feldes «Anrede» in der Adresserfassungsmaske mit demjenigen der Anredeerfassungsmaske einstellen. Unter Aktion suchen wir deshalb den Begriff «SetzenWert» – damit haben Sie die Erklärung für die etwas langatmige Einführung in diesen Makroschritt. Als Nächstes müssen wir die Aktionsargumente setzen, und auch hier verwenden wir wieder ein Tool, das Access zur Verfügung stellt, nämlich den Ausdruckseditor. Bei einem Klick in die Zeile hinter «Feld» erscheint wiederum die Minischaltfläche mit den 3 Punkten, die wir bereits kennen. Ein Klick darauf öffnet ein weiteres Fenster, den so genannten «Ausdruckseditor» Dieser Editor – der eigentlich
nichts kann, was wir nicht auch von Hand könnten, hilft uns, die manchmal nicht ganz einfache Syntax von Access automatisch in die richtige Form zu bringen. Immer wenn wir einen Parameter – ein so genanntes «Aktionsargument» einstellen wollen, zeigt uns Access in blauer Schrift rechts vom einzustellenden Argument, was genau damit gemeint ist. Im vorliegenden Fall zeigt es grob zitiert diese Hilfe: «Geben Sie den Namen des Steuerelementes ein, das eingestellt werden soll...». In unserem Fall wollen wir ja das Feld «Anrede» des Formulares «Adress-Eingabe» einstellen. Dazu gehen wir im Ausdruckseditor unten links im Explorerähnlichen Feld und klicken auf «Formulare/Alle Formulare/Adress_Eingabe». Nun erscheint rechts davon (im mittleren Feld) eine Liste mit allen zur Verfügung stehenden Feldern dieses Formulars – ein Doppelklick auf «Anrede» füllt sogleich oben im Ausdrucksfeld den benötigten Ausdruck mit allen eckigen Klammern, Ausrufezeichen und Bezeichnungen ein. Ein Klick auf «OK» schliesst den Ausdruckseditor und fügt automatisch den Ausdruck in die Zeile im Aktionsargument «Feld» ein. Das nächste Aktionsargument «Ausdruck» füllen wir auf dieselbe Art. Wir sehen uns im Hilfetext an, was Access hier für ein Ausdruck erwartet – logisch, wir müssen ja noch wissen, mit was das Anredefeld gefüllt werden soll – nämlich mit dem Wert, den wir im Anrede-Formular erfasst haben. Also bitte, den Ausdruckseditor aufrufen, im Explorer-Feld das Formular «Anrede_erfassen» suchen, dann das Feld «Schlüsselfeld» doppelklicken und «OK» wählen, und schon haben wir wieder den gewünschten Ausdruck im Aktionsargument ausgefüllt. Falls Sie sich jetzt fragen, warum wir das «Schlüsselfeld» und nicht «Anrede» aus der Anredemaske wählen, verdeutlichen Sie sich, dass wir im Feld «Anrede» in der Adressmaske nur einen Verweis auf die Anrede und nicht die Anrede selbst speichern.
. . . Schritt 3 . . . Nun, da wir die neue Anredeform im Anredefeld eingefügt haben, hat es ja keinen Sinn mehr, dass der Cursor noch weiter in diesem Feld stehen bleibt. Daher sorgen wir mit einem weiteren Makroschritt dafür, dass das Feld «Vorname» den Fokus erhält, also der Cursor im Feld «Vorname» blinkt und eine Eingabe erwartet. Felder sind in Access «Steuerelemente» und die Makroaktion heisst demenstprechend «GeheZu-Steuerelement». Dem einzigen zugehörigen Aktionsparameter «Steuerelementname» weisen wir den Namen des gewünschten Feldes zu, in unserem Fall also «Vorname»!
. . . und noch etwas Kosmetik! Rein der Sauberkeit halber schliessen wir jetzt noch die Anrede-Erfassungsmaske, die brauchen wir ja nicht bei jeder neuen Adresse. Wie wir ein Objekt per Access-Makro schliessen, haben wir in Folge 15 durchexerziert – deshalb sei hier nur kurz erwähnt, dass wir diesmal den Objekttyp und den Objektnamen angeben müssen! Weshalb – jetzt hat nämlich ein anderes Formular als das zu schliessende den Fokus (also die Aufmerksamkeit) von Access und wenn wir jetzt einfach ein Formular schliessen, wird – ganz klar – einfach die momentan aktuelle Maske geschlossen und das ist in unserem Falle eben die «Adresserfassungsmaske»! Schliessen Sie nun wie bereits letztes Mal den Makroeditor, schalten Sie das Formular in den Datenerfassungsmodus und geben Sie eine neue Anredeform ein. Nun ein Klick auf die Entertaste und...! Max Geissbühler
INFORMATIK access-kurs
Einbinden bereits vorhandener Tabellen
Access on Data (XVII) Wir haben nun gelernt, dass es fehlerverhindernd sein kann, wenn wir Daten nur einmal eingeben und sie stets wiederverwenden. Sollte sich einmal herausstellen, das wir doch einen Fehler gemacht haben, dann lässt er sich durch die Korrektur an einer einzigen Stelle beheben, an allen anderen Orten (Abfragen, Berichten, Formularen) wird er automatisch korrigiert. Das ist übrigens ein weiterer, nicht unbedingt offensichtlicher und bisher noch nicht erwähnter Vorteil relationaler Datenbanken. In unserem Beispiel sind wir immer noch am Optimieren – nachdem wir die Anrede aus einer separaten Tabelle in die Adresse «hineinziehen», haben wir hier bereits eine komfortable Lösung. Wenn wir nun weiteres Optimierungs-Potenzial suchen, finden wir es aber weder im Vornoch im Nachnamen – diese Daten sind nun doch zu individuell – noch in der Strasse, sondern erst wieder in Postleitzahl und Ort. Dafür wird es hier doppelt interessant, denn jede Postleitzahl gehört eindeutig zu einer Ortschaft und natürlich umgekehrt.
Kostenlose PLZ-Datei An dieser Stelle wollen wir uns gleich mal vor Augen führen, wie komfortabel Access mit femden Dateien umgehen kann und aus diesem Grund stellt MegaLINK auf dem Internet unter http://www.megalink.ch/Inhalt/ Artikel-Archiv/artikel-archiv.html eine dBase-Datei mit allen Postleitzahlen und Ortschaften der Schweiz inklusive Kantonszugehörigkeit zur freien Verfügung. Wer schon mal so eine Datei gesucht hat, der weiss, wie schwierig es ist, diese irgendwo schnell mal zu finden. Unsere Empfehlung: Laden Sie sich diese einmal herunter, damit wir mit dieser weiterarbeiten können – und wenn Sie selbst damit nicht 48
MegaLink 11/2000
viel anfangen können, geben Sie sie an Ihre EDV-Abteilung weiter, irgendwann wird sie sicher gebraucht. Alternativ können Sie diese Datei mit einem adressierten und frankierten Rückantwortkuvert und 5 Franken in Briefmarken bei der Redaktion bestellen. Nachdem Sie die Datei heruntergeladen oder per Diskette erhalten haben, speichern Sie diese in einem separaten Verzeichnis (am besten unter c:\postleitzah len\PLZ_Verzeichnis.dbf) ab – und dies aus folgendem Grund: Access unterstützt neben dem Importieren auch das Einbinden von Datentabellen und wir wollen uns mit beiden Varianten einmal auseinandersetzen. Und das Einbinden von fremden Tabellen lässt sich am besten mit einer Datei simulieren, die nicht im gleichen Verzeichnis liegt.
Dateityp die Bezeichnung «dBase IV (*.dbf)» und suchen das vorhin erstellte Verzeichnis «c:/postleitzahlen/»! Hier sollten wir nun die PLZ-Datei sehen, die wir abgelegt haben – selektieren Sie diese und klicken Sie auf «Importieren» und bereits nach kurzer Zeit sehen Sie neben den beiden bisherigen Tabellen das «PLZ_Verzeichnis», das jetzt als vollwertige Datentabelle in Access zur Verfügung steht und auch mit unserer Datenbank abgespeichert wird – dadurch wächst natürlich die Datenbank im Umfang der importierten Daten. Diesen Umstand müssen Sie sich merken – ich werde in der nächsten Folge auf die Unterschiede und Vor- und Nachteile von eingebundenen und importierten Dateien zurückkommen.
Importierte Tabellen
Erfassung neu organisieren
Sie haben die Tabelle bereits in einem Verzeichnis abgelegt – dann nichts wie los! Starten Sie die Datenbank «Kontakte.mdb» und wechseln Sie im DCC auf die Registerkarte «Tabellen» – hier sehen wir die beiden Tabellen «Adresse» und «Anrede». Klicken Sie in der Menüleiste auf «Datei» auf den Menüpunkt «Externe Daten» und anschliessend auf den Untermenüpunkt «Importieren». In der Dateiliste suchen wir unter
Da der Autor nicht genau weiss, wie viele und wie wichtige Daten Sie in Ihrer Datei bisher gespeichert haben, wählen wir hier einen etwas umständlicheren Weg, um die geänderte Erfassung in unsere Datenbank zu integrieren – mit dieser Methode gehen keine Daten verloren und der Aufwand, um die bereits erfassten Daten der neuen Erfassungsmethode anzupassen, hält sich in Grenzen.
Wir haben ja bisher stets die Postleitzahl und die Ortschaft in der Tabelle «Adresse» erfasst – diese beiden Felder sind in Zukunft nicht mehr nötig und werden durch das Feld «Auto_PLZ» ersetzt. Wir lassen aber die beiden alten Felder vorläufig so, wie sie sind, und ergänzen die Tabelle «Adresse» einzig um das vorher erwähnte Feld «Auto_PLZ» mit dem Datentyp «LongInteger». So können wir dann einfach die vorhandenen Werte übertragen und anschliessend die alten Felder löschen. Nun wollen wir für die beiden Tabellen «Adresse» und «PLZ_Verzeichnis» noch die Beziehungen definieren. Das ist zwar nach wie vor nicht zwingend notwendig, spart uns aber in Zukunft Arbeit bei der Erstellung von Abfragen oder Berichten und sollte an dieser Stelle erledigt werden, umsomehr als es ja jetzt keinen grossen Aufwand bedeutet. Dazu klicken wir – wie in Folge XII/MegaLINK 6/2000 vorexerziert – auf «Extras/Beziehungen» und fügen die Tabelle «PLZ_Verzeichnis» mit dem Menüpunkt «Tabellen anzeigen» in das Fenster ein. Nun ziehen wir mit gedrückter Maustaste das Feld «ID» aus der Tabelle «PLZ_Verzeichnis» auf das Feld «Auto_PLZ» der AdressTabelle und lassen es fallen. Im sich nun öffnenden Dialogfeld
INFORMATIK access-kurs
«Beziehungen» sehen wir, dass es sich wieder um eine 1:n-Beziehung handelt. Im Gegensatz zu Folge XII setzen wir aber keinen Haken bei «Mit referentieller Integrität», da wir in der Postleitzahlen-Tabelle ja nie irgend einen Wert löschen wollen. Ein Klick auf «Erstellen» zeichnet eine Linie zwischen den beiden Einträgen und erspart uns in Zukunft einiges an Denkarbeit.
Erfassungsmaske ändern Nun müssen wir natürlich noch die Datenerfassungs-Maske neu organisieren – bisher haben wir ja zu jedem Namen die Postleitzahl und die Ortschaft erfasst. Das wird in Zukunft auf ein Auswählen beschränkt sein – schliesslich haben wir ja mit dem Import der PLZ-Tabelle die ganze Erfassung bereits hinter uns und wir können uns darauf verlassen, dass wir beim Schreiben keine falschen Eingaben machen. Wechseln wir deshalb im DCC auf Formulare, selektieren die Adress_Erfassungs-Maske und öffnen sie mit «Entwurf» im Änderungsmodus.
Nun benötigen noch die Werkzeugliste – falls sie noch nicht auf dem Bildschirm ist, holen wir sie mit der Menüleiste, indem wir auf «Ansicht», «Toolbox» klicken. Aus der Werkzeugliste wählen wir wiederum ein Kombinationsfeld, das wir an der Stelle ins Formular einfügen, wo wir später die Postleitzahl auswählen/eingeben möchten. Wie bereits bei der Anrede kennengelernt, möchten wir auch wieder, dass uns das Kombinationsfeld einen Wert aus einer Tabelle – nämlich der Postleitzahlen-Tabelle – entnimmt und den Verweis auf diesen Eintrag in der Adresstabelle einfügt. Also wählen wir im Dialogfeld den Eintrag «Das Kombinationsfeld soll die Werte einer Tabelle oder Abfrage entnehmen» und klicken auf «Weiter»! Im nächsten Dialog selektieren wir logischerweise «PLZ_Verzeichnis» und in der übernächsten die beiden Felder «ID» und «PLZ». Ein weiterer Klick auf «Weiter» bringt uns zum Dialog «Breite der Kombinationsspalte», mit der Maus kann hier die opti-
male Breite für das Kombinationsfeld «Postleitzahl» eingestellt werden, indem rechts neben der Bezeichnung «PLZ» ein Doppelklick erfolgt – alternativ kann die Breite durch Klicken und Ziehen stufenlos angepasst werden. Zusätzlich sollten Sie noch – wenn nicht bereits automatisch geschehen – die Schlüsselspalte ausblenden. Ein nächstes «Weiter» bringt uns zum letzten Dialog, hier wählen wir den zweiten Punkt «Wert speichern in Feld» und wählen im Kombinationsfeld rechts davon das Feld «Auto_PLZ»! Die nächste Dialogbox fordert uns noch auf, entweder einen Namen für das Kombinationsfeld zu vergeben oder den vorgegebenen zu akzeptieren. Wie immer geben wir dem Feld eine Bezeichnung und schreiben hier: «Auto_PLZ_Wahlfeld»!
So funktionierts Was haben wir damit erreicht resp. was passiert mit diesem Kombinationsfeld?! Ganz einfach – das Kombinationsfeld in der
Adresserfassungsmaske zeigt uns die Postleitzahlen aus der Tabelle «PLZ_Verzeichnis». Nach der Auswahl einer bestimmten Postleitzahl, also wenn wir das Feld verlassen, wird der in der (ausgeblendeten) Schlüsselspalte (Feld «ID») enthaltene Wert im Feld «Auto_PLZ» der Tabelle «Adresse» gespeichert und damit ein Bezug zur Postleitzahl hergestellt.
. . . und dasselbe in Grün! Wir wollen aber in unserer Adresse nicht nur Ortschaften nach Postleitzahlen eingeben, sondern auch umgekehrt, Postleitzahlen nach Ortschaftsnamen suchen. Um diese Funktionalität einzubauen, benötigen wir ein weiteres Kombinationsfeld mit genau den gleichen Eigenschaften und genau denselben Tabellenzugriffen, einziger Unterschied ist nur der Feldname «Ort» statt «PLZ»! Sie können dies sicher ohne Anleitung – wir werden diese aber in der nächsten Folge des Access-Kurses noch nachliefern! Versuchen Sies doch einfach mal . . . ! Max Geissbühler
MegaLink 11/2000
49
INFORMATIK access-kurs
Access on Data Teil (XVIII) Nun – in der letzten Folge unseres Access-Kurses haben wir Sie am Schluss noch aufgefordert, die Maske mit dem Feld «Ortschaftsnamen» zu ergänzen, nota bene ohne Anleitung. Haben Sie Ihre Hausaufgaben gemacht und hats funktioniert – in diesem Fall können Sie getrost die nächsten Abschnitte überspringen und beim Abschnitt «Verknüpfte Tabellen» weiterfahren. Für all diejenigen, die nicht ganz so weit gekommen sind, hier noch die Erläuterungen: Um die Ortschaftsnamen zu erfassen, müssen wir natürlich auch hier die Datenerfassungs-Maske neu organisieren – bisher haben wir ja zu jeder Postleitzahl auch die Ortschaft eingetippt. Auch das wird in Zukunft auf ein Auswählen beschränkt sein – denn auch hier haben wir ja mit dem Import der PLZ-Tabelle die ganze Erfassung bereits hinter uns, und wir können uns darauf verlassen, dass wir beim Schreiben keine falschen Eingaben machen. Wie schon so oft, wechseln wir deshalb im DCC auf Formulare, selektieren die Adress_ErfassungsMaske und öffnen sie mit «Entwurf» im Änderungsmodus. Nun benötigen noch die Werkzeugliste und wählen wiederum ein Kombinationsfeld, das wir an der Stelle ins Formular einfügen, wo später die Ortschaft ausgewählt/eingegeben werden sollte. Wie bereits bei der Anrede und Postleitzahl kennengelernt, möchten wir auch wieder, dass uns das Kombinationsfeld einen Wert aus einer Tabelle – nämlich die Ortschaft aus der Postleitzahlen-Tabelle – entnimmt und einen Verweis auf diesen Eintrag in der Adresstabelle einfügt. Also wählen wir im Dialogfeld den Eintrag «Das Kombinationsfeld soll die Werte einer Tabelle oder Abfrage entnehmen» und klicken auf «Weiter»! 44
MegaLink 12/2000
Im nächsten Dialog selektieren wir logischerweise «PLZ_Verzeichnis» und in der übernächsten die beiden Felder «ID» und «Ort». Der nächste Dialog lässt uns die «Breite der Kombinationsspalte» für das Kombinationsfeld «Ort» einstellen, indem rechts neben der Bezeichnung «Ort» ein Doppelklick erfolgt – alternativ kann die Breite durch Klicken und Ziehen stufenlos angepasst werden. Zusätzlich sollten Sie auch hier wiederum die Schlüsselspalte ausblenden. Ein nächstes «Weiter» bringt uns zum letzten Dialog, hier wählen wir den zweiten Punkt «Wert speichern in Feld» und wählen im Kombinationsfeld rechts davon das Feld «Auto_PLZ»! Die nächste Dialogbox fordert uns noch auf, entweder einen Namen für das Kombinationsfeld zu vergeben oder den vorgegebenen zu akzeptieren. Wie immer geben wir dem Feld einen Bezeichnung und schreiben hier: «Auto_Ort_Wahlfeld»!
Unbedingt beachten... Das Kombinationsfeld in der Adresserfassungsmaske zeigt uns die gespeicherten Ortschaften aus der Tabelle «PLZ_Verzeichnis». Nach der Auswahl einer bestimmten Ortschaft, also wenn wir das Feld verlassen, wird der in der (ausgeblende-
Hier sehen sie den visuellen Unterschied zwischen einer verknüpften und einer importierten Tabelle in Access – ein kleiner Unterschied mit verblüffender Wirkung!
ten) Schlüsselspalte (Feld «ID») enthaltene Wert im Feld «Auto_PLZ» der Tabelle «Adresse» gespeichert und damit ein Bezug zur Postleitzahl hergestellt. Haben Sie den Trick gemerkt – der in der Schlüsselspalte enthaltene Wert wird wiederum im Feld «Auto_PLZ» gespeichert! Hier braucht es für die Ortschaft kein separates Feld mehr – denn es ist egal, ob Sie die PLZ oder die Ortschaft wählen – die IDNummer «2579» dieses Datensatzes bestimmt eindeutig, dass die Postleitzahl «5001» zur Ortschaft «Aarau» gehört – also ist es völlig unnötig, ein zweites Feld anzulegen, um etwas anderes resp. genau dasselbe zu speichern! Also bitte – beachten.
dann funktionierts! Wechseln Sie nun wiedermal in den Datenerfassungsmodus und sehen Sie sich an, was passiert, wenn Sie beispielsweise eine bestimmte Postleitzahl auswählen! Im Kombinationsfeld wird gleichzeitig auf die entsprechende Ortschaft gewechselt. Selektieren Sie nun im Kombinationsfeld «Ort» eine
andere Ortschaft, wechselt wiederum fast gleichzeitig auch die Postleitzahl!
Verknüpfte Tabellen Ebenfalls versprochen haben wir Ihnen, noch auf die Vor- und Nachteile von «Verknüpften oder Importierten Tabellen» hinzuweisen! In unserem Fall haben wir ja die Tabelle importiert – dadurch ist natürlich der Umfang der Datenbank im Umfang der importierten Daten gewachsen. Dies ist bereits der eine Nachteil von importierten Datentabellen! Es ist allerdings ein Vorteil, wenn die Daten aus der importierten Tabelle nur in dieser Datenbank benutzt werden, denn wenn wir die Datenbank verschieben – also von einem Rechner auf einen anderen oder gar nur von einem Verzeichnis ins andere transportieren, dann brauchen wir auch wirklich nur die eine .mdb zu kopieren. Soll aber eine Datenbank mit verknüpfter Tabelle verschoben werden, muss auch an die «fremde» Tabelle mitsamt der Verzeichnisstruktur gedacht werden.
INFORMATIK access-kurs
Nun denken wir aber einmal an einen anderen Fall – in einem Betrieb gibt es vielfach Datenbanken, die eigentlich nichts miteinander zu tun haben und doch teilweise die gleichen Daten verwenden. Nehmen wir beispielsweise die PostleitzahlDatenbank: Es ist klar, dass wir mit unserer Marketing-Datenbank wenig gemeinsam haben mit der Einkaufsdatenbank aus dem Betriebsbüro! Und trotzdem – die Ortschaften sind für beide Datenbanken gültig! Und schon haben wir die vielgerühmten Synergien: Im Betriebsbüro merkt der Sachbearbeiter, dass die Ortschaft «Aaarau» mit drei «a» geschrieben ist und korigiert dies in der gemeinsam genutzten Datei! Der Vorteil ist klar – das nächste Mal wenn wir ein Mailing rauslassen, ist «Aarau» auch in der
Marketing-Datenbank bereits richtig geschrieben.
Kosten sparen Dies sind aber nicht alle Vorteile von verknüpften Dateien – viele Leute schwören auf so genannte dBase-Viewer – kleine, komfortable Programme, die zum Bearbeiten von ganzen Dateien im dbf-Format eine echte Hilfe sein können und wo man ohne die Installation von Access oder eines entsprechenden Programmes nicht weit käme. Nun kann es aber sein, dass dieselbe Arbeit mit einem kostenlosen dBaseViewer ohne Einarbeitung in Acces genausogut erledigt werden könnte. Auch hier ist man auf Tabellen im dbf-Format angewiesen, denn mdb-Dateien aus Access weisen ein wesentlich komplexeres Datenformat auf.
Übrigens: Auch mit Excel kann direkt auf dBase-Dateien zugegriffen werden – und dieses Programm dürfte doch wohl wesentlich verbreiteter sein als Access selbst!
Geschenk!? Nun – das sind natürlich noch lange nicht alle Vor- und Nachteile, die uns Microsoft mit dem Geschenk der «importierten oder verknüpften Tabellen» gemacht hat. In vielen Fällen mag man sich auch fragen, ob es denn wirklich notwendig ist, denn vielfach ist die Entscheidung auch schwierig. Trotzdem – wir wollen nicht klagen, getreu dem Motto: «Einem geschenkten Gaul schaut man nicht ins Maul» und fragen uns ganz einfach was wäre, wenn wir die Qual der Wahl nicht hätten!
Und deshalb freuen wir uns ganz einfach über dieses Geschenk, denn wenn Sie diese Zeilen lesen steht das Christkind bereits bedenklich nahe an der Tür, und in diesem Sinne wünscht Ihnen der Autor dieser Zeilen frohe Festtage und einen guten Rutsch ins neue Jahr. Und er möchte sich bei allen Lesern, die an diesem Exkurs in Access im alten Jahr teilgenommen haben und auch im neuen Jahr wieder teilnehmen ganz herzlich bedanken. Max Geissbühler
MegaLink 12/2000
45
INFORMATIK windows-ecke
Referentielle Integrität
Access on Data (XIX) Nachdem wir im letzten Jahr bereits so weit gekommen sind, dass wir Daten aus mehreren Datentabellen in einem Formular darstellen können, wollen wir sogleich weiterfahren und uns darauf konzentrieren, das Gelernte auch anzuwenden. In der vorliegenden Folge des MegaLINK 1/2001 bauen wir die Datenbank weiter aus zum Dokumentenverwaltungssystem. Doch an dieser Stelle folgt noch etwas Kosmetik – wir haben nun eine komfortable Lösung gefunden, um die Ortschaft nicht bei jeder neuen Adresse neu eingeben zu müssen! Aus diesem Grund löschen wir in der Tabelle «Kontakte» die beiden Felder «PLZ» und «Ort»! Konsultieren Sie dazu das DCC (DatenbankControl-Center) und öffnen Sie die Tabelle «Kontakte» im Entwurfsmodus! Hier selektieren Sie die beiden erwähnten Felder und löschen Sie beide mit «Delete». Anschliessend speichern Sie die Tabelle wieder ab, indem Sie die Änderungen akzeptieren! Nun muss auch noch die Datenerfassungsmaske dementsprechend korrigiert werden – öffnen Sie also die entsprechende Datenerfassungsmaske ebenfalls im Erfassungsmodus und löschen Sie die beiden Felder «PLZ» und «Ort» – achten Sie aber darauf, nicht die Kombinationsfelder zu löschen, die wir jetzt verwenden, um die Postleitzahl und die Ortschaft zu selektieren!
Erweiterungsfähig So – damit haben wir das Kapitel «Tabellen einbinden oder importieren» erfolgreich hinter uns gebracht – überlegen wir uns deshalb, ob wir die nun doch schon recht weit gediehene Datenbank nicht noch anderweitig nutzen könnten! Schön wäre es doch beispielsweise, wenn wir zu jeder Adresse 40
MegaLink 1/2001
auch gleich die letzte wichtige Korrespondenz zur Verfügung hätten. Dazu benötigen wir beispielsweise einen Hinweis darauf, in welchem Ordner sich das aktuelle Word-Dokument befindet. Perfekt wäre zudem, wenn wir direkt – aus Access heraus – das Dokument direkt starten könnten, um zu sehen, wie der aktuelle Status ist! Und da wir mit Access arbeiten, wollen wir uns nicht mit halben Sachen beschäftigen und wählen gleich die komfortabelste Variante: Vollzugriff auf alle Dokumente eines bestimmten Kunden, direkt aus Access heraus! Wie aber wollen wir das bewerkstelligen? Irgendwann mal, ganz am Anfang, haben wir festgestellt, dass zu jeder Datenbank und jeder Datenbankänderung ein Pflichtenheft gehört. Und da das vorliegende Projekt eine wesentliche Änderung unserer Datenbank darstellt und – sie werden sehen – man viele Überlegungsfehler machen kann, erstellen wir uns an dieser Stelle und nur mit wenigen Strichen ein Konzept.
Falsch . . . Im ersten Moment könnte man nämlich versucht sein, einfach ein weiteres Feld in der Adresse-Tabelle einzufügen, das den Pfad zum Dokument aufnehmen kann! Das stimmt tatsächlich, insofern wir zu jedem Kunden ein einziges Dokument abspeichern
Einer der vielen Vorteile des relationalen Datenbanksystems Access von Microsoft ist die absolut flexible Erweiterbarkeit, wie unser vorliegendes Beispiel zeigt! Unsere Datenbank war am Anfang nie als Dokumentenverwaltungssystem vorgesehen!
wollen! Das dürfte aber in den wenigsten Fällen der Fall sein! Nehmen wir mal an, das wir Mailings, Offerten, Bestätigungen, Lieferscheine, Rechnungen und Mahnungen verwalten wollen, dann ergibt dies bereits 5 . . . 6 Dokumente pro Geschäftsbeziehung und -fall!
. . . und nochmals falsch! «Na, dann machen wir doch einfach gleich 5 neue Felder in der Adress-Tabelle», könnte man sich überlegen! Für jeden Vorfall ein Feld – aber auch das ist nicht unbedingt der richtige Weg! Denn wer sagt, dass wir zu einem bestimmten Kunden nur eine einzige Geschäftsbeziehung haben möchten (ausser wir wären jenes ominöse Versandhaus, das sich nicht vorstellen kann, das ein Kunde je nochmals wiederkommt!).
1:n Zu diesen Überlegungen hinzu kommt die Regel, die wir in einer früheren Folge dieses Kurses aufgestellt haben: Alles was für sich selbst einen Sinn ergibt, wird in
einer separaten Tabelle gespeichert! Zudem gilt hier auch die Regel: «Nur Tabellen, die in einer 1:n-Beziehung stehen, werden auch aufgeteilt!» Denn wiederum zur ersten Regel wäre zu sagen, dass sowohl die Adressen als auch die Dokumente durchaus für sich alleine stehend einen Sinn ergeben! Und nach der zweiten Regel ist ganz klar: Zu einer Adresse können durchaus auch viele Dokumente gehören!
Feldtyp Ebenfalls in unsere Überlegungen einbeziehen sollten wir den Feldtyp für unsere Dokumentenverwaltung – doch was liegt eigentlich näher als ein Textfeld!? Wir wollen ja den Pfad zu einem Dokument abspeichern und ein Pfadname besteht nun einmal aus alphanummerischen Zeichen! Doch halt – es gibt einen Typ, den haben wir uns bis jetzt noch nie angesehen – den Feldtyp «Hyperlink»! Die Bezeichnung «Hyperlink» deutet schon in sich selbst auf die Fähigkeit, auf Internet-Dokumente zuzugreifen.
INFORMATIK windows-ecke
Das ist aber längst nicht alles, denn viel wichtiger – wenigstens für unsere Zwecke – ist die Möglichkeit, damit mit einem Klick auf Dokumente, die auf dem PC oder im Netzwerk gelagert sind, zugreifen zu können.
So machen wirs! Aus diesen Überlegungen geht eindeutig hervor, dass wir für die Dokumentenverwaltung eine separate Tabelle kreieren, die den Feldtyp «Hyperlink» enthält. Zudem benötigen wir noch eine Verbindung zu der Tabelle «Adresse», damit wir die Dokumente auch dem spezifischen Kunden zuweisen können. Denn schliesslich wollen wir ja auch wissen, wem wir welche Dokumente zugestellt haben.
An die Arbeit Öffnen Sie jetzt das DCC (Datenbank-Control-Center) und erzeugen Sie eine neue Tabelle. Als erstes kreieren wir ein Feld des Typs «LongInteger», das die Bezeichnung «Adress-ID» erhält. In diesem Feld speichern wir die IDNummer aus der Adress-Tabelle. Was wir nun noch brauchen, ist ein Feld des Typs «Hyperlink», das wir «Dokument» nennen. Die Feldeigenschaften lassen wir gemäss den Voreinstellungen, die Access vornimmt – bis auf den Eintrag «Eingabe erforderlich», denn schliesslich wollen wir ja im Haupteintrag dieser Tabelle keine Leereinträge. Das war’s bereits, schliessen Sie nun die Tabellendefinition ab, und akzeptieren Sie ruhig, dass Access ein Primärschlüsselfeld für diese Tabelle erstellen will – wir wissen ja nicht, ob wir dieses Feld nicht nochmals brauchen, und wenn nicht, lassen wir uns davon nicht stören und brauchen es Ende Jahr einfach dazu, um festzustellen, wieviele Dokumente wir denn erstellt haben!
Beziehungen nicht vergessen Um uns das Leben später zu vereinfachen, definieren wir auch hier wieder die Beziehungen zwischen den einzelnen Tabellen. Rufen Sie dazu den Menüpunkt
«Extras/Beziehungen» auf. Hier sehen Sie jetzt die Tabellen «Adresse», «PLZ» und «Dokumente». Falls Letztere noch nicht sichtbar ist, klicken Sie mit der rechten Maustaste einmal an einer freien Stelle im Fenster und selektieren sie sie im Kontextmenü. Nun klicken Sie bei «Dokumente» mit der Maus auf den Eintrag «Adress-ID» und ziehen diesen zur Tabelle «Adresse» und hier auf den Eintrag «ID»! Sobald Sie die Maustaste loslassen, erscheint das Fenster «Beziehungen» und hier versehen wir den Punkt «Mit referentieller Integrität» mit einem Häkchen.
Referentielle Integrität Dieses kleine Häkchen kann Wunder bewirken – ist es angeklickt, können wir nämlich die Adresse in der Tabelle «Adresse» nicht löschen, solange in der Tabelle «Dokumente» ein Eintrag zu diesem Datensatz gehört. Es kann also nicht passieren, dass wir eine Adresse löschen und später – z.B. bei einer Abfrage – Dokumente in der Tabelle «Dokumente» haben, die zu keiner Adresse gehören! Falls wir eine Adresse trotzdem löschen wollen, müssen wir in der Tabelle «Dokumente» zuerst die Datensätze löschen, die zu dieser Adresse gehören. Erst wenn kein einziger Datensatz mehr auf diese Adresse verweist, kann die Adresse gelöscht werden – ist einfach irgendwie clever! Nun gibt es noch zwei weitere Menüpunkte, die wir hier aber nicht anwenden wollen, deshalb seien sie nur kurz gestreift: – Aktualisierungsweitergabe an Detailfeld. Wenn wir diesen Punkt selektieren, wird eine eventuelle Änderung des Schlüsselfeldes in der Adresstabelle automatisch an die Dokument-Tabelle weitergeleitet. Dies wäre beispielsweise der Fall, wenn wir das Schlüsselfeld von Hand generieren würden (etwa eine Kundennummer nach dem Muster HAMUAA (jeweils die ersten beiden Buchstaben aus Vorname, Name und Ortschaft HAns MUster AArau). Wenn nun unser
Kunde HAMUAA von Aarau nach Zürich wechselt, dann müssten wir ja die Kundennummer nach HAMUZU ändern und diese Änderung muss auch an die Detailtabellen weitergereicht werden. Mit unserem System der einzigartigen Nummer können uns solche Fälle nichts anhaben – denn jede Kundennummer ist einzigartig und muss auch nie geändert werden. – Löschweitergabe an Detaildatensatz – bewirkt, wie die Bezeichnung vermuten lässt, dass Datensätze in der Dokument-Tabelle automatisch gelöscht würden, wenn wir die zugehörige Adresse löschen! Einerseits ist dies u. U. ein hilfreicher Punkt, denn damit können wir problemlos Datensätze in der Adresstabelle löschen, dabei werden auch gleichzeitig die zugehörigen Datensätze in der Tabelle «Dokumente» gelöscht – das kann aber auch gleichzeitig sehr gefählrich sein! Wir jedenfalls wollen dies nicht, und deshalb setzen wir vor diesen Punkt auch kein Häkchen. Ganz unten im Dialogfeld zeigt Ihnen Access die Bestätigung dessen, was Sie schon immer wussten – bei dieser Beziehung handelt es sich um eine 1:nBeziehung! Klicken Sie an dieser Stelle auf «Erstellen» und schliessen Sie damit dieses Dialogfeld, die Beziehungen in der Access-Datenbank zwischen der Adress-Tabelle und der Dokumenten-Tabelle sind Access nun klar!
Erfassungsmaske erstellen Jetzt wollen wir aber einmal sehen, wie das mit der Erfassung funktioniert – wir benötigen nur noch eine Erfassungsmaske! Dazu wechseln wir im DCC auf Formulare und wählen «NEU»! Um uns Arbeit zu ersparen, lassen wir uns mit «AutoFormular: einspaltig» ein Formular generieren, das die Hyperlinks aufnehmen wird. Natürlich müssen wir in diesem Dialogfeld wieder angeben, für welche Tabelle wir ein Formular benötigen, aber das dürfte klar sein, wir wollen ja den Hyperlink
in die Dokument-Tabelle eintragen – also wählen Sie hier «Dokumente» und klicken Sie auf «Fertigstellen»! Nach einem kurzen Augenblick, den Access benötigt, um das Formular zu zimmern, erhalten Sie eine schön gestaltete Maske, die Sie nun noch ganz Ihren individuellen Wünschen punkto Gestaltung anpassen könnten! Doch was offenbart uns ein noch kritischerer Blick – na klar! Es war Access bei der Erstellung dieser Maske nicht klar, dass es die Dokumente einer bestimmten Adresse zuweisen muss – das müssen wir nun noch von Hand erledigen! Überlegen wir doch mal ganz kurz, welches Feld uns für diese Arbeit den besten Dienst leisten könnte – natürlich, wiederum das Kombinationsfeld, das wir bereits von unserer Arbeit – beispielsweise als PLZ- oder Ortschafts-Selektions-Feld – her kennen! Denn auch hier basiert unsere Arbeit auf bereits vorhandenen Einträgen – wir wollen ja hauptsächlich bestimmte Dokumente bestimmten Adressen zuweisen – und wenn wir keine Adresse haben, hat es auch keinen Wert, wenn wir ein Dokument in unserer Datenbank eintragen.
Unentbehrlicher Helfer Also wechseln Sie nun nochmals in den Entwurfsmodus dieses Formulars und fügen Sie ein Kombinationsfeld ein! Wir werden in der nächsten Folge noch genauer darauf eingehen – hier nur noch ein Tipp: Die Verbindung zwischen der Adress-Tabelle und der Dokumenten-Tabelle ist das Feld «Adress-ID» . . . ! Und nun bis zum nächsten Mal Max Geissbühler
MegaLink 1/2001
41
INFORMATIK windows-ecke
Abfragen als Grundlage
Access on Data (XX) Seit Folge 19 unseres Access-Datenbank-Kurses bauen wir unsere Adress-Verwaltung aus zu einem Dokumentenverwaltungs-System, indem wir den Feldtyp «Hyperlink» verwenden, um einen Pfad zu einem Dokument zu speichern, der bei einem Klick das zugehörige Dokument gleich mit dem zugehörigen Programm öffnet. Um die Dokumente zuweisen zu können, haben wir eine neue Tabelle erstellt, die unter anderem ein Feld enthält, das die ID der Adresse speichert. Und vielleicht haben Sie schon ein wenig weiter experimentiert und dabei gemerkt, dass wir Sie ein wenig in die Irre geführt haben!
Dadurch, dass wir die Postleitzahl und die Ortschaft in der Adressdatenbank bereits aus einer anderen Tabelle holen, haben wir in der Adresstabelle selbst auch nur einen Verweis in Form einer Zahl auf die Postleitzahl und den Ort. Wenn wir nun die Tabelle als Grundlage für ein Kombinationsfeld benützen und dabei auch das entsprechende Feld anzeigen lassen, dann zeigt uns Access auch nur das, was in der Tabelle gespeichert ist, für Postleitzahl und Ort in diesem Fall halt einfach eine Zahl, die zu allem Überfluss noch durchaus wie eine Postleitzahl aussehen kann, was nicht weniger verwirrlich ist! Aus diesem Grund muss deshalb wieder die Postleitzahl und die Ortschaft in Klartext angezeigt werden! Doch wie wir dies auch drehen und wenden, so einfach lassen sich in ein Kombinationsfeld die Angaben aus mehreren Tabellen nicht einfügen! Aber es müsste doch eine Möglichkeit geben . . . ?!
Grundlage: Abfrage Ja, aber natürlich – Kombinationsfelder sind nicht sehr heikel, was die zugrundeliegenden Da42
MegaLink 2/2001
ten anbelangt, solange es sich um Daten aus einer einzigen Quelle handelt! Nehmen wir doch einfach eine Abfrage, die die Daten aus den beiden Tabellen Adresse und Ort kombiniert und benützen wir diese Abfrage als Grundlage für unser Kombinationsfeld! Um uns gleich einmal vor Augen zu führen, wie dies funktioniert, probieren wir es gleich einmal aus! Selektieren Sie im DCC das Register «Abfragen», «Neu» und dann «Entwurfsansicht»! Unter «Tabellen anzeigen» fügen Sie die beiden Tabellen «Adresse» und «PLZ_Verzeichnis» zur Abfrage hinzu! Und sogleich sehen Sie auch schon den Vorteil der bereits definierten Beziehungen – hier ist die Verbindung zwischen den beiden Tabellen durch die Verbindungslinie bereits hergestellt. Nun überlegen wir uns, welche Felder wir denn nun für unser Kombinationsfeld benötigen – wir müssen ja in einer Zeile feststellen können, zu welcher Adresse wir denn nun die Dokumente zuweisen wollen. Eindeutig wird diese Adresse wohl nur, wenn wir wenigstens «Vorname», «Name», «Strasse» und «Ort» sehen! Es könnte nämlich sein, dass wir
Sehr komfortabel – ziehen Sie ein Dokument aus dem Explorer auf das Hyperlink-Feld «Dokument», dies fügt den Pfad zum Dokument ein. Ein Klick auf diesen Pfad öffnet das Dokument mitsamt dem zugehörigen Programm!
den berühmten «Heiri Müller» mehrfach in unserer Datei führen, allerdings sind dies verschiedene Personen, unterscheidbar nur durch die Ortschaft und vielleicht sogar nur durch die genaue Adresse! Wählen Sie also alle Felder, die Sie für eine eindeutige Identifikation der entsprechenden Person benötigen aus beiden Tabellen aus, indem Sie auf jeden einzelnen Eintrag doppelklicken! Alternativ können Sie die Einträge auch per Drag and Drop in das Abfragefenster in der unteren Hälfte des Abfrage-Definitionsfensters ziehen. Wenn Sie dies erledigt haben, wechseln Sie in den Abfragemodus, indem Sie – wie bei der Erstellung von Masken auch – ganz oben links auf den Button klicken und so zwischen den beiden Ansichten «Abfragemodus» und «Definitionsmodus» switchen! Vergewissern Sie sich nun im Abfragemodus, dass Sie alle benötigten Felder auch in der Abfrage sehen! Haben Sie an alle – wirklich alle – benötigten Felder gedacht? Haben Sie daran gedacht, dass Sie die Adresse am besten aufsteigend nach Namen sortieren – es dürfte ihnen dann
um einiges leichter fallen, im Kombinationsfeld mit der Maus die entsprechende Adresse herauszusuchen! Viel wichtiger aber: Haben Sie auch daran gedacht, dass Sie auch das Feld «ID» aus der Adress-Tabelle benötigen, um es dann in der Dokumenten-Tabelle als Verweis auf die Adresse zu speichern! Wenn ja, dann gratulieren wir Ihnen, ansonsten wechseln Sie nochmals in den Definitionsmodus und fügen Sie dieses Feld auch noch hinzu und beenden Sie anschliessend diese Abfrage unter dem Namen «Dokument_Adress_Abfrage».
Felder «verstecken» Nun müssen wir das Kombinationsfeld in das Formular «Dokumente» einfügen – öffnen Sie dazu dieses Formular im Entwurfsmodus und löschen Sie das alte Kombinationsfeld – natürlich könnten wir es auch so abändern, dass es mit den neuen Einstellungen funktioniert, aber das ist recht umständlich. Wählen Sie daher in der Toolbox wiederum ein Kombinationsfeld und ziehen Sie dieses in die DokumentenMaske an die Stelle, an der Sie die Adresse auswählen wollen.
Dokumenten-Pfad Nun wechseln Sie nochmals in den Erfassungsmodus und selektieren Sie eine Adresse! Na –
klappts, oder könnte es sein, dass in der ersten Spalte der Vorname auftaucht – in diesem Fall wollen Sie bitte die nächste Folge unseres Access-Kurses abwarten, dort werden wir dann noch genauer auf die Eigenschaften eines Kombinationsfeldes eingehen. In der vorliegenden Folge arbeiten wir aber jetzt mal so und sie wählen also eine Adresse! So – und nun gehen Sie mit der Maus in das Feld «Hyperlink» und klicken einmal mit der rechten Maustaste in dieses Feld! Im Kontextmenü fahren Sie bitte mit dem Mauszeiger auf «Hyperlink» und anschliessend wollen Sie bitte auf «Hyperlink bearbeiten» klicken! In der folgenden Dialogbox öffnet ein Klick auf «Durchsuchen» ein Explorerfenster, in dem Sie das Dokument, das Sie hier speichern wollen, suchen können. Tun Sie das mal und wählen Sie beispielsweise ein Word-Dokument aus, indem Sie einfach ein Dokument aus der Liste auswählen und anschliessend auf OK klicken. Lassen Sie bitte den Menüpunkt «Relativen Pfad . . .» mit einem Häckchen versehen, wir kommen später nochmals darauf zurück. Sobald Sie auf «OK» geklickt haben, befinden Sie sich wieder in der Dokument-Erfassungsmaske und Sie sehen im Feld «Dokumente» einen Pfadeintrag – wenn Sie nun mit der Maus einmal auf diesen Eintrag klicken, wird das Dokument mit dem zugehörigen Programm – in diesem Fall mit Word – automatisch gestartet.
Komfort ohne Grenzen Tja – das ist eigentlich schon der ganze Zauber unserer Dokumentenverwaltung! Nur das Erfassen der Dokumente – geht das wohl nicht ein wenig einfacher . . . !? Und ob – eröffnen Sie doch gleich mal einen neuen Datensatz, indem Sie im Kombinationsfeld eine neue Adresse wählen. Nun öffnen Sie den Dateiexplorer und ziehen Sie ein Word-Dokument per Drag and Drop einfach aus dem Explorer-Fenster auf das Hyperlink-Feld und lassen Sie es hier fallen – auch das fügt den Pfad ein und ein Klick auf den Eintrag öffnet wiederum das Dokument mit dem richtigen Programm! Max Geissbühler
▼
Nun folgt wieder die bereits bekannte Dialogfolge «Das Kombinationsfeld soll die Werte einer Tabelle oder Abfrage...»: In der nächsten Dialogbox wählen Sie nun aber statt einer Tabelle eine Abfrage! Dazu müssen Sie zuerst unter dem Dialogfeld mit den Tabellennamen den Punkt «Abfragen» auswählen! Sogleich wechseln oben im Feld die Namen der Tabellen und Sie sehen alle Abfragen, die bisher erstellt wurden. Wählen Sie hier den Eintrag der vorhin definierten Abfrage – also die «Dokument_Adress_ Abfrage»! Im nächsten Dialog selektieren Sie alle Felder durch einen Klick auf die doppelte spitze Klammer! Die breite der Felder lassen Sie auf den Voreinstellungen und wiederum einen Schritt weiter unter «Wenn Sie eine Zeile im Kombinationsfeld . . .» müssen Sie den Wert «ID» selektieren! In der nächsten Dialogbox weisen Sie Access nun an, diesen Wert im Feld «Adress-ID» zu speichern! Nun fehlt uns nur noch ein Name für das Kombinationsfeld, wir entscheiden uns hier für «Adress-Selektion» und damit dürfen wir auf «Fertigstellen» klicken. Wir wollen doch gleich mal sehen, wie sich nun das Formular «anfühlt» und wechseln dazu einmal in den Datenerfassungsmodus. Tja – sieht eigentlich gut aus, aber die beiden Felder «ID» und «Adress-ID» stören ein wenig – die brauchen wir nicht. Daher schalten wir wieder zurück in den Definitionsmodus, klicken mit der rechten Maustaste einmal auf das Feld «ID» und wählen im Kontextmenü den Befehl «Eigenschaften»! Nun suchen Sie bitte unter «Format» den Eintrag «Sichtbar» und setzen hier den Wert von «ja» auf «nein» – dazu genügt ein Doppelklick auf «ja», altenativ können Sie aber auch «Nein» über die Tastatur eingeben! Dasselbe tun Sie nun noch für das Feld «Adress_ID», auch in dieses Feld wollen wir von Hand nichts eingeben und es enthält keine Informationen, die wir für unsere Arbeit brauchen, deshalb blenden wir es aus!
MegaLink 2/2001
43
INFORMATIK windows-ecke
Formular mit Unterformular
Access on Data (XXI) Unsere Kontakt-Datenbank mausert sich langsam von der Adresskartei zum Dokumentenverwaltungssystem. Wagen Sie jetzt mal ein Gedankenexperiment und versuchen Sie, diese Datenbank für die Video- oder Audio-CD-Sammlung zu verwenden. Sie sehen, es gibt da keine grundlegenden Unterschiede: So kann man sich vorstellen, die Adress-Tabelle für die CDs, Kassetten und Schallplatten zu verwenden. Auf diesen Datenträgern befinden sich verschiedene Musikstücke oder Videos – also verschiedene Dokumente! Sie könnten sich jetzt doch eine eigene Datenbank zur Verwaltung ihres Hobbys bauen – na, das wäre doch gleich ein gutes Übungsbeispiel.
Doch wir kommen wieder zurück zu unserer Kontaktdatenbank – die Verwaltung unserer Dokumente funktioniert (hoffentlich) und auch das Speichern der einzelnen Dokumente ist ja ganz passabel gelöst! Manchmal kommt aber der Augenblick, wo der schnelle, komfortable Blick auf die Daten wichtiger ist als die komfortable Dateneingabe. Stellen Sie sich vor, ein Kunde ruft Sie an, um Sie darüber zu informieren, dass er in Kürze an eine neue Adresse umzieht. Zugleich möchte er auch wissen, ob seine Offerte, die er angefordert hat, schon weg ist. Wenn nicht, möchte er diese gleich an die neue Adresse erhalten.
Auf einen Blick Für Sie persönlich wäre es schön, wenn Sie jetzt alle Kundendaten, inklusive alle Dokumente, die Sie an diesen Kunden gesendet haben, auf einen Blick im Zugriff hätten – sprich: alle Firmenangaben und eine Liste aller Dokumente in einem Formular, sozusagen ein Formular mit Unterformular! 2
MegaLink 3/2001
Wie Sie sich als Access-Kenner sicher vorstellen können, gibt es in Access mehrere Möglichkeiten, solche Datenzusammenzüge auf komfortable Art zu generieren. Da wäre zum einen die klassische Art, also ein Formular, das alle Adress-Daten in einem Hauptund die Dokumenten-Daten in einem Unterformular auf einen Blick enthält – diese Art wollen wir in der vorliegenden Folge kennenlernen. Dann gibt es natürlich die zweite Art – die Grunddaten in dem einen Formular und die Detail-Daten auf einem weiteren, das durch einen Klick auf eine Schaltfläche aufgerufen wird. Wie gesagt, wir beschäftigen uns hier jetzt erstmal mit der ersten Art, weil diese unserem Bedürfnis eher entspricht und weil sie ebenso simpel wie genial und praktisch in der Anwendung ist. Doch bevor wir einfach aufs Geratewohl loslegen, eine kurze Überlegung! Was haben wir in der letzten Folge festgestellt? Genau – Kombinationsfelder sind nicht wählerisch, was die Anzeige von Daten betrifft, aber aus einer einzigen Quelle stammen müssen
Um die Datensatzzähler der Kundendatenbank zu durchlaufen, müssen Sie den Datensatzzähler am unteren Bildrand verwenden. Der Datensatzzähler in der Untertabelle hingegen durchläuft alle Dokumente des betreffenden Kunden.
sie! Und ein Kombinationsfeld zur Auswahl der Adresse mit Name, Vorname und Ort werden wir sicher benötigen! Denn es könnte doch sein, dass wir den «Hans Muster» zweimal in unserer Datenbank haben. Dass es aber zwei «Hans Muster» an derselben Adresse gibt, das dürfte eher ins Reich der Fabel gehören.
Grundlage Abfrage Was tun wir jedesmal in einem solchen Fall – wir kreieren eine Abfrage, die die entsprechenden Daten zusammenzieht. Und um der Übung Willen wollen wir uns hier nochmals vor Augen führen, wie das geht! Erstellen Sie also eine Abfrage im Entwurfsmodus und wählen Sie die beiden Tabellen, die dazu benötigt werden – also die Adress- und die PLZ-Tabelle. Durch die bereits erfolgte Beziehungsdefinition sehen Sie die Verbindungslinie zwischen den beiden Feldern «ID» der
Adress- und «Auto-PLZ» der PLZ_Verzeichnis-Tabelle. Nun ziehen Sie alle benötigten Felder in die untere Hälfte der Abfrage-Definition – das wären aus der Adress-Tabelle die Felder «Name», «Vorname», «Strasse» und aus dem Postleitzahlen-Verzeichnis «PLZ» und «Ort»! Wechseln Sie nun schnell mal vom Definitions- in den Abfragemodus, um zu kontrollieren, ob die Abfrage auch das macht, was Sie sich vorgestellt haben. Wenn Sie damit fertig sind, schliessen Sie die Abfrage, und geben Sie ihr den Namen «Dokumente_pro_Adresse».
Zwei-in-Eins Nun müssen wir ein Formular generieren, das uns die Daten anzeigt. Wechseln Sie im DCC zu «Formulare» und wählen Sie hier «Neu» und anschliessend im Dialogfeld «Formular-Assistent». Unterhalb dieser Auswahl müs-
INFORMATIK windows-ecke
sen Sie nun die vorher erstellte Abfrage «Dokumente_pro_Adresse» auswählen und anschliessend «OK» drücken. Nun öffnet sich ein weiteres Dialogfeld, das uns anweist, die gewünschten Felder zu wählen, die wir angezeigt haben möchten! Wichtig ist, hierbei zu wissen, dass wir Felder aus mehreren Quellen wählen dürfen. Wählen Sie hier unter «Verfügbare Felder» alle Felder aus, die wir in unserem Formular benötigen – das wären «Vorname», «Name» und «Strasse», «PLZ», «Ort». Das genügt uns aber noch nicht – wo nehmen wir denn das Feld «Dokumente» her? Wie wir ja vorhin gerade erfahren haben, dürfen wir aber Felder aus mehreren Quellen wählen – also, wählen Sie oberhalb der Feldliste, unter «Tabellen/Abfragen» die Tabelle «Dokumente» aus und fügen Sie noch das Feld «Dokumente» hinzu! In der rechten Spalte sollten Sie nun alle Felder aufgelistet sehen, die wir erwähnt haben. Klicken Sie nun auf «Weiter», und nun können Sie wählen, wie Ihre Daten dargestellt werden sollen – nämlich als Formular, als Formular mit integriertem Unterformular oder als verknüpfte Formulare. Bei letzterem erscheint im ersten Formular nur die Adresse, erst ein Klick auf einen Button lässt dann die zugehörigen Daten in einem weiteren Formular erscheinen. Wir wollen aber ein Formular mit Unterformulare, und deshalb wählen wir links neben der grafischen Darstellung den ersten Eintrag «nach Dokumente_pro_Adresse» und achten darauf, dass unterhalb der Darstellung der Punkt «Formular mit Unterformular» selektiert ist. Nun klicken wir wieder auf «Weiter» und erhalten ein neues Dialogfeld. Hier können wir
wählen, welches Layout das Unterformular haben soll – wählen Sie hier «Datenblatt» – die gestalterischen Möglichkeiten, die Sie anschliessend mit diesem Formular haben werden, rechtfertigen diesen Schritt. Ein weiteres «Weiter» bringt uns zu den Stilvorlagen, wählen Sie hier wieder ihr bevorzugtes Layout, also jenes, mit dem Sie auch bisher schon Ihre Datenbank verschönert haben und klicken Sie wieder auf «Weiter». In dieser Dialogbox geben Sie an, wie denn das Formular in Zukunft heissen soll, wir wählen den Namen «Dokumente_pro_Adresse» und das Unterformular soll den Namen «Dokumente_pro_Adresse_Unterform» erhalten. Machen Sie es sich zur Gewohnheit, Unterformularen genau den gleichen Namen zu geben wie dem Hauptformular, allerdings mit dem Zusatz «_Unterform». Dies ist aus zweierlei Gründen empfehlenswert – erstens erscheint in der Reihenfolge der Formulare das Unterformular immer gleich nach dem Hauptformular und erspart unnötige Sucharbeit! Und zweitens macht Sie die Zusatzbezeichnung «_Unterform» darauf aufmerksam, dass dieses Formular nicht gelöscht werden sollte, da es zu einem Hauptformular gehört. Sie werden sehen, wenn Sie viele Formulare haben und einmal eines suchen, werden Sie schnell mal auf die Idee kommen und ein anscheinend nicht mehr benötigtes Formular löschen – und wenn dies dann ein Unterformular war, wird eben das Hauptformular die Daten nicht mehr vollständig anzeigen. Sehen Sie sich doch anschliessend, wenn wir mit der Definition fertig sind, das Unterformular einmal separat an, Sie werden dann meine Warnung besser verstehen.
So funktionierts! An dieser Stelle sind wir nun fertig mit der Definition unseres Dokumente-Formulares und können es uns mit «Fertigstellen» anzeigen lassen. Wenn Sie (und natürlich auch ich) nichts falsch gemacht haben, dann sollte jetzt ein Formular ähnlich unserer Abbildung auf Ihrem Monitor stehen. Sie können nun mit dem Datensatzzähler am unteren Bildschirmrand alle Datensätze durchlaufen und Sie werden sehen, dass die Liste der Dokumente mit jedem neuen Namen wechselt, der oben in der Adressmaske erscheint. Und in der Dokumentenliste können Sie mit einem einzigen Klick das Dokument öffnen. Passen Sie aber auf, dass Sie hier keine Daten ändern, sämtliche Daten können von hier aus auch editiert werden. In der nächsten Folge wollen wir uns dann gemeinsam anschauen, wie das Formular vor unbefugten oder ungewollten Eingaben geschützt werden kann. Ausserdem ist auch die Adressauswahl mit dem Datensatznavigator am unteren Bildrand noch nicht optimal gelöst. Die ganz Eiligen können schon mal probieren, wie Sie eine bessere Navigation hinkriegen – aufgrund der bisherigen AccessKurse sollte dies auch kein Problem mehr sein! An dieser Stelle sei hier noch soviel verraten – es braucht nur ein einziges Kombinationsfeld . . . !
Fehler. Wir werden eventuelle Korrigendas im Internet unter dieser Rubrik veröffentlichen, da es dem Leser nicht zugemutet werden kann, bis zum Erscheinen des neuen Heftes darauf zu warten. Max Geissbühler
Zusatzservice Noch etwas in eigener Sache – falls Sie Probleme mit dem Access-Kurs haben und irgend etwas funktioniert nicht, dann wollen Sie bitte unter www.megalink.ch/Inhalt/Artikel-Archiv/artik el-archiv.html nachsehen. Denn in der Hitze des Gefechtes passieren auch dem Autor manchmal MegaLink 3/2001
3