Erste Schritte

Kapitel 8
Einführung in Base
Arbeiten mit Datenbanken

Dokumentationen zu LibreOffice unter de.libreoffice.org

Copyright
Dieses Dokument unterliegt dem Copyright © 2019. Die Beitragenden sind unten aufgeführt. Sie
dürfen dieses Dokument unter den Bedingungen der GNU General Public License(http://www.gnu.org/licenses/gpl.html), Version 3 oder höher, oder der Creative Commons
Attribution License (http://creativecommons.org/licenses/by/3.0/), Version 3.0 oder höher,verändern und/oder weitergeben.
Warennamen werden ohne Gewährleistung der freien Verwendbarkeit benutzt.
Fast alle Hardware- und Softwarebezeichnungen und weitere Stichworte und sonstige Angaben,
die in diesem Buch verwendet werden, sind als eingetragene Marken geschützt.
Da es nicht möglich ist, in allen Fällen zeitnah zu ermitteln, ob ein Markenschutz besteht, wird das
Symbol (R) in diesem Buch nicht verwendet.

Mitwirkende/Autoren
Jochen Schiffers

Gerhard Weydt

Rückmeldung (Feedback)Kommentare oder Vorschläge zu diesem Dokument können Sie in deutscher Sprache an die
Adresse discuss@de.libreoffice.org senden.

Vorsicht

Alles, was an eine Mailingliste geschickt wird, inklusive der E-Mail-Adresse undanderer persönlicher Daten, die die E-Mail enthält, wird öffentlich archiviert und kannnicht gelöscht werden. Also, schreiben Sie mit Bedacht!

Datum der Veröffentlichung und Softwareversion
Veröffentlicht am 24.12.19. Basierend auf der LibreOffice Version 6.2.

2

Einführung in Base

Inhalt
Einführung ...................................................................................................................................... 5
Interne und externe Datenbanken ............................................................................................. 5Base und Java ........................................................................................................................... 6
Datenbanken .................................................................................................................................. 7
Datenquellen ............................................................................................................................. 8
Arbeiten mit Datenbank-Dokumenten ............................................................................................ 8
Beschreibung des Beispiels ....................................................................................................... 9
Abgrenzung zu Calc .................................................................................................................. 9
Anlegen einer Datenbank ............................................................................................................. 10
Starten des Datenbank-Assistenten ........................................................................................ 10
Schritt 1: Datenbank auswählen .............................................................................................. 11
Schritt 2: Anmelden, Speichern ............................................................................................... 12Interne und externe Datenbanken ........................................................................................... 13
Das Startfenster eines Datenbank-Dokuments ............................................................................ 13
Verwaltung von Tabellen .............................................................................................................. 14
Primärschlüssel ....................................................................................................................... 15
Tabelle erstellen ...................................................................................................................... 16
Datenanzeige und -verwaltung in der Tabellensicht ................................................................. 17
Formulare: erster Einstieg ............................................................................................................ 17
Formulare ................................................................................................................................ 18
Erzeugen eines Formular-Dokuments ..................................................................................... 18
Erzeugen des Formulars mit dem Assistenten .................................................................... 19
Formular verwenden ........................................................................................................... 20
Bearbeiten des Formulars ................................................................................................... 22
Tabellarisches Formular ...................................................................................................... 25
Mehrstufige Formulare ................................................................................................................. 27
Tabellen für Komponist und Werk ............................................................................................ 27
Relationen ............................................................................................................................... 28
Erzeugen des Formulars mit dem Assistenten ........................................................................ 30
Mit dem zweistufigen Formular arbeiten .................................................................................. 30
Abfragen ...................................................................................................................................... 31
Was sind Abfragen .................................................................................................................. 31
Abfragen erstellen ................................................................................................................... 32
Zwei Abfragen für Listenfelder ............................................................................................ 32
Sortierung ........................................................................................................................... 34
Abfrage für Auswertungen .................................................................................................. 34
Erweiterung des Formular-Dokuments auf weitere Ebenen ......................................................... 34
n:m-Beziehung ........................................................................................................................ 34
Der Formularnavigator ............................................................................................................. 36
Hinzufügen von Elementen zu einem Formular ....................................................................... 37
Bearbeiten des Formular-Dokuments ...................................................................................... 38
Verwendung des erweiterten Formulars .................................................................................. 393

Vorläufiges Fazit ...................................................................................................................... 39
Berichte ........................................................................................................................................ 40
Bericht unter Verwendung des Assistenten erstellen ............................................................... 41
Weitere Schritte .................................................................................................................. 41
Eine Abfrage für Berichte ......................................................................................................... 43
Die Struktur eines Berichts ...................................................................................................... 44
Berichte in der Entwurfsansicht erstellen ................................................................................. 45
Schritt 1: Datenbestand auswählen ..................................................................................... 45
Schritt 2: Gruppierung und Sortierung ................................................................................. 46
Schritt 3: Platzierung der Felder .......................................................................................... 47
Schritt 4: Weitere Arbeiten am Bericht ................................................................................ 49
Vergleich mit einem vom Assistenten erzeugten Bericht ..................................................... 49
Funktionale Erweiterungen des Formulardokuments ................................................................... 50
Weiteres Formular zur Detailanzeige ....................................................................................... 50
Aktualisieren des Formulars .................................................................................................... 50
Neues Medium direkt im Formular ........................................................................................... 52
Hinzufügen von Einzelfeldern ............................................................................................. 53
Hinzufügen eines Mediums ................................................................................................. 54
Direkte Übernahme des Mediums (mit Makro) ........................................................................ 55
Externe Formulare ................................................................................................................... 60
Erstellung eines externen Formulars ................................................................................... 60
Datenquellen in LibreOffice verwenden ........................................................................................ 60
Datenquellen anzeigen und bearbeiten ................................................................................... 60
Daten einer Datenquelle in Writer verwenden ..................................................................... 61
Weitere Möglichkeiten ......................................................................................................... 63
Daten einer Datenquelle in Calc verwenden ............................................................................ 63
Daten als Teil-Tabelle einfügen ........................................................................................... 63
Externes Formular erzeugen ............................................................................................... 63

4

Einführung in BaseEinführung
Base ist die Datenbank-Komponente von LibreOffice. Datenbanken dienen dazu, große Datenmengen in strukturierter Form effizient und sicher zu verwalten und sie schnell und flexibel auszuwerten. Datenbanken sind allgegenwärtig: Bankgeschäfte und Zahlungsverkehr, die gesamte
Verwaltung aller nicht geradezu winzigen Firmen, Fertigungssteuerungen, das gesamte Internet
usw., sie alle wären undenkbar ohne den Einsatz von Datenbanken.
Base ist keine Datenbank bzw. genauer kein Datenbanksystem, sondern primär ein Werkzeugkasten, mit dem Sie Datenbanken oder Datenbankanwendungen erstellen und verwalten können. Die
Datenbanken, auf die Sie zugreifen können – oder besser: die Datenquellen, dieser Begriff wird
häufig, aber nicht konsequent benutzt, da nicht alles, was Base behandeln kann, eine Datenbank
im eigentlichen Sinn ist – können verschiedene Organisationsformen haben (s. „Datenquellen“ aufSeite 8), und darauf aufbauend können die Zugriffsmöglichkeiten unterschiedlich weitgehend sein.
Echte Datenbanken bieten den vollen Umfang von Zugriffen, und zwei Datenbanksysteme werden
mit LibreOffice standardmäßig mitgeliefert, nämlich HSQLDB und Firebird, s. „Interne und externe
Datenbanken“ auf Seite 5.
Egal, welche Datenquelle sie verwenden: der Zugriff erfolgt im Wesentlichen auf die gleiche Weise,so dass die Datenquellen im Grunde austauschbar sind und die Anwendung gleich bleibt. Der
größte Unterschied besteht darin, dass Sie auf manche Datenquellen, die keine Datenbanken im
eigentlichen Sinn sind (z. B. csv-Dateien), nicht schreiben können. Bei manchen Datenquellen ist
also der nutzbare Umfang der Möglichkeiten einfach eingeschränkt.
Sie können mit Base schnell und einfach sogenannte Formulare erstellen, mit denen Sie Ihre Daten anzeigen und verwalten können. Sie können damit ganz unterschiedliche Zugänge zu Ihren
Daten gestalten, beispielsweise ähnlich einer pro Tag oder pro Ort auswählbaren Veranstaltungsliste, oder vergleichbar einem Eingabeformular, wie Sie es beim Überweisen im Onlinebankingoder beim Registrieren bei einem Online-Anbieter verwenden.
Natürlich möchten Sie Ihre Daten auch auswerten. Das kann mittels Formularen geschehen odermit Hilfe von Berichten, die Sie in Form von Text- oder Tabellen-Dokumenten erzeugen und dannunabhängig von der Datenbank weitergeben können.
Ganz wichtig sind im Zusammenhang mit Base auch Makros (in Basic oder einer anderen in
LibreOffice verwendbaren Programmiersprache), mit denen Sie das Gebilde aus Datenhaltung(Datenbank) und Oberfläche (Formulare) zu einer echten Anwendung ausbauen können, unter
anderem:•Fehlerprüfungen, um gesicherte und konsistente Daten zu gewährleisten•

Ablaufsteuerungen über Schaltflächen, die über Dialoge Daten erfragen oder
Entscheidungsmöglichkeiten bieten oder auch andere Formulare aufrufen•

Hintergrundprogramme, die unabhängig von der Oberfläche die Daten in der Datenbank
verändern oder auswerten

Dieses Kapitel soll alle wesentlichen Aspekte von Base zumindest anreißen, damit Sie einenÜberblick bekommen, wie Base arbeitet und was Sie damit erreichen können. Es beschreibt die
Funktionen daher nur exemplarisch und erhebt keinen Anspruch auf Vollständigkeit. Was an
Beispielen vorgestellt wird, ist vollständig beschrieben, so dass Sie es nachvollziehen können,
eigene Ideen werden Sie oft in Anlehnung an das Vorgestellte auch selbst realisieren können, aberfür eine tiefer gehende und umfassendere Kenntnis von Base sollten Sie dann das inhalts- undumfangreiche spezielle Base-Handbuch zu Rate ziehen.

Interne und externe Datenbanken
Wenn Sie LibreOffice installiert haben, werden derzeit noch automatisch zwei Datenbanksysteme,
HSQLDB und Firebird, mitinstalliert, in der Ausprägung, dass jeweils ein Nutzer Verwaltungsrechte,
Einführung5aber beliebig viele Nutzer Leserechte haben. Dies ist in vielen Fällen – vor allem, wenn Sie
alleiniger Nutzer sind – ausreichend.
In Zukunft wird irgendwann HSQLDB nicht mehr mit ausgeliefert, sondern nur noch Firebird, dasSie daher verwenden sollten, wenn sie mit einer internen Datenbank arbeiten wollen. HSQLDB ist
derzeit aber noch nötig, weil es natürlih viele ältere Anwendungen mit diesem System gibt und sichdie automatische Umwandlung einer HSQLDB-Datenbank in eine mit Firebird noch in Entwicklung
befindet.

HinweisDa momentan noch das Problem besteht, dass man in Verbindung mit einer
Firebird-Datenbank über ein Formularfeld zwar ein Bild in der Datenbank speichern,es aber nicht wieder anzeigen kann (Bug 121886 in der Fehlerverwaltung Bugzilla),
wird das Beispiel noch mit der HSQLDB realisiert. Abgesehen von diesem Aspekt,
der in „Tabelle erstellen“ auf Seite 16 und „Neuer Datensatz“ auf Seite 21 behandelt
wird, ist das beschrieben Vorgehen für HSQLDB und Firebird identisch.

Datenbanken, die mittels dieser Systeme realisiert wurden, werden im Datenbank-Dokument
gespeichert (Vorteil: sie werden mit dem Dokument weiterverteilt; Nachteil: sie sind verschwunden,
wenn das Dokument gelöscht wird.). Man nennt diese Form daher „Interne Datenbank“. Weiterer
Vorteil: Sie brauchen sich nicht um die Installation eines Datenbanksystems zu kümmern.
Bei Verwendung anderer Datenquellen (s. „Datenquellen“ auf Seite 8) sind die Daten unabhängig
vom Datenbank-Dokument gespeichert, weshalb man von „externen Datenquellen“ spricht. Sie
benötigen diese Form des Zugriffs, wenn die Daten sowieso schon vorliegen, aber auch, wenn Sie
ein anderes Datenbanksystem wie MySQL/MariaDB oder PostgreSQL nutzen wollen.

HinweisSie können im Gegensatz zu der speziellen Verwendung als interne Datenbank
auch eine Instanz der HSQLDB oder von Firebird getrennt auf ihrem Rechner
installieren und sie dann genauso wie andere externe Datenbanken einsetzen.
Details finden Sie im Base-Handbuch.

Nutzen Sie daher beim Einstieg in Base, wenn Sie nicht aus anderen Gründen grundsätzlich ein
externes Datenbanksystem verwenden wollen, zunächst die „interne Datenbank“ mit Firebird.
Wenn Sie eine langfristige Lösung suchen, ist allerdings oft eine externe Datenbank die bessere
Alternative. Abgesehen vom Installationsaufwand (der auch nicht hoch sein muss) des Datenbanksystems ist das genauso einfach wie bei einer internen Datenbank, aber Sie haben den Vorteil,dass Sie ein ausgefeiltes System nutzen, das sich auch mit sehr großen Datenmengen und inkomplexen Umgebungen millionenfach bewährt hat, und für das auch weitere Werkzeuge zur
Verfügung stehen.

Base und Java
LibreOffice verwendet für einige Funktionen (noch) Java. Dies gilt insbesondere für viele Assistenten, vor allem aber ist die interne Datenbank HSQLDB auf Java angewiesen. Ein Einsatz von Baseohne Java ist daher nur möglich, wenn Sie Zugriff auf ein anderes der von Base unterstützten
Datenbanksysteme haben (und dafür ein Connector ohne Java verfügbar ist); sie verzichten dannaber trotzdem eventuell noch auf manchen Komfort.
Sie benötigen nur die Java-Laufzeitumgebung (Java Runtime Environment, JRE). Diese ist kostenlos und kann von der Seite https://www.java.com/de/download/ heruntergeladen und dann installiert werden.

6

Einführung in BaseHinweis

LibreOffice auf Windows war früher ein 32-Bit-Programm. Ab der LibreOffice-Version
5.0 wird auch eine 64-Bit-Version bereitgestellt. Für die 64-Bit-Version vonLibreOffice benötigen Sie auch die 64-Bit-Version von Java (standardmäßig wird
Ihnen bei der Neuinstallation von Java eventuell noch die 32-Bit-Version angeboten).
Informationen dazu und den Link für den Download finden Sie auf:
https://www.java.com/de/download/faq/java_win64bit.xml#Java%20for%2064-bit.

Sie müssen einstellen, dass LibreOffice die Java-Laufzeitumgebung verwenden soll. Sie tun dasüber Extras → Optionen… → LibreOffice → Erweitert. Warten Sie kurz, bis die installierten
Versionen angezeigt werden; wenn keine angezeigt wird, können Sie die von Ihnen installierteüber Hinzufügen… aufnehmen. Wählen Sie die einzige oder die geeignete Version aus und setzen
Sie außerdem den Haken vor Eine Java-Laufzeitumgebung verwenden.

Datenbanken
Einfache Datenbestände wie z.B. ein Telefonverzeichnis kann man einfach als Listen in ganz
unterschiedlichen Formen speichern, beispielsweise als Tabelle in einem Textdokument oder ineinem Calc-Dokument. Wenn die Datenzusammenhänge komplizierter sind und auch höhere
Anforderungen an die Auswertung der Daten gestellt werden, reichen solche einfachen Datenbestände nicht mehr aus. Man benötigt dann eine komplexe Datenstruktur mit mehreren Teil-Datenbeständen, die untereinander auch in Beziehung stehen.
Zum Beispiel sind die Schulen eines Bundeslandes Schulämtern unterstellt, die Schulämter könnten direkt dem Kultusministerium zugeordnet sein, es könnte aber auch eine zwischen diesen beiden liegende regionale Ebene geben. Zu einer Schule gehören ihre Schüler. Die Lehrer werden
wahrscheinlich, was ihre beruflichen Belange betrifft, auf einer der oben genannten höheren
Ebenen verwaltet, in finanzieller Hinsicht wahrscheinlich durch eine Finanzdirektion betreut, undfür den Einsatz im jeweiligen Schuljahr einer Schule zugeordnet. Irgendeine dieser genannten
Ebenen muss sich wahrscheinlich auch um die Verwaltung der Gebäude kümmern (wenn es nicht
gar noch eine weitere neue Stelle ist). Ausgaben werden wahrscheinlich auf allen genannten
Ebenen anfallen.
Diese Sammlung von Stichpunkten ist ganz sicher noch sehr unvollständig und nicht detailliert
genug, sie zeigt aber bereits, dass ein großer Bedarf besteht, solche Datensammlungen zu
organisieren und zu strukturieren, um mit ihnen effektiv arbeiten zu können. Wenn man Daten ineine solche Struktur gebracht hat, die das Arbeiten mit ihnen unterstützt und erleichtert, nennt man
das eine Datenbank.
Base verwendet zur Ablage der Daten in einer Datenbank das sogenannte relationale Modell, dassich als universales Modell für fast alle Belange fest etabliert hat. Nur für spezielle Aufgaben (z. B.
geografische Informationen, Datenbanken nur für Auswertungen, sog. Data Warehouses, …) setzt
man andere Modelle ein.
Eine Datenbank in Base besteht entsprechend dem relationalen Modell aus einer oder meist
mehreren Tabellen. Auf den ersten Blick sieht eine solche Tabelle kaum anders als eine Tabelle inCalc aus, aber das betrifft nur die vordergründige Optik. Calc ist grundsätzlich darauf ausgerichtet,
einzelne Zellen individuell zu behandeln, Zellen links, rechts, über oder unter einer Zelle können
ganz andersartige Inhalte oder Berechnungslogiken haben. In einer Datenbank hingegen gehören
die Daten einer Zeile, der Datensatz, untrennbar zusammen. Und alle Felder einer Spalte haben
die gleiche Eigenschaft, also z.B. den Feldtyp (Text, Zahl, Datum usw.), die Länge …
Wenn Sie Ihre Daten in solchen Tabellen abbilden können, hat das einen großen Vorteil, denn die
gleichmäßige Struktur ermöglicht deutlich schnellere Zugriffe. Sie können dann auch ganz einfach
andere Sichtweisen auf die Tabellen definieren, so dass Sie für jeden Zweck die optimale Darstellungsform wählen können; diese Sichtweisen sind in der Datenbank gespeichert und können
jederzeit schnell wieder eingesetzt werden. Sie werden das Im Folgenden im Detail sehen.

Datenbanken

7Ein ganz wichtiger Aspekt von Base ist weiterhin, dass Sie, wenn Sie relationale Datenbanken
einsetzen, Beziehungen zwischen Tabellen in der Datenbank (sog. Relationen, s. „Relationen“ aufSeite 28) oder auch beim Datenzugriff definieren können, so dass das Datenbanksystem äußerst
komplexe Kombinationen der Daten sehr effektiv zur Verfügung stellen kann.
Wir werden im Folgenden nur relationale Datenbanken genauer betrachten, da nur mit solchen der
Funktionsumfang von Base umfassend genutzt wird; konkret werden wir mit dem mit LibreOfficemitgelieferten internen Datenbanksystem (HSQLDB oder Firebird) arbeiten, weil für dieses keingesonderter Installationsaufwand nötig ist. Sie können damit auch schnell eine Datenbank für eineeinzige Tabelle erstellen, wie Sie an der ersten Phase unseres durchgängigen Beispiels erkennen
können; und selbst in diesem einfachen Fall werden Sie bereits sehen, dass es Situationen gibt, indenen Calc für solche Listen von gleichartigen Daten nicht die optimale Wahl ist. Näheres dazu
finden Sie in „Abgrenzung zu Calc“ auf Seite 9.

Datenquellen
In Base werden – wie oft auch anderswo – die beiden Begriffe „Datenbank“ und „Datenquelle“
weitgehend synonym verwendet. Gemeint ist damit manchmal das Datenbank-Dokument, also die
Datei, die Sie in Base bearbeiten, die außer den Daten bzw. den Verbindungsinformationen füreine externe Datenbank noch Formulare, Berichte usw. enthält, seltener das Datenbanksysteminsgesamt und meist tatsächlich die Datenquelle, also die Daten selbst mitsamt ihren Zugangsmöglichkeiten, die aber nicht immer eine Datenbank im engeren Sinn sein muss. Um welche
Bedeutung es sich tatsächlich handelt, sollte aber aus dem Kontext klar werden.
Base kann mit folgenden Arten von Datenquellen umgehen:•relationalen Datenbanken , die vor allem mit MySQL bzw. MariaDB1, PostgreSQL, deninternen oder externen Datenbanken HSQLDB und Firebird oder auch MS Access erzeugt
wurden, oder sonstigen Datenbanken, für die es einen JDBC- oder ODBC-Treiber gibt.

•

Sogenannten flachen Dateien, d.h. Dateien, die zwar Daten in einem tabellarischen Format
enthalten, aber nicht auch die Verbindungen zwischen mehreren Dateien. Darunter fallen
so unterschiedliche Dateiformate wie•◦

Calc-Dateien, also LibreOffice-Tabellendokumente
Diese Dateien können mit Base nur gelesen und ausgewertet, aber nicht geändert
werden.

◦Dbase-Dateien
Diese Dateien können gelesen und geschrieben werden◦

Textfiles, z.B. mit den Endungen .txt oder .csv
Diese Dateien können wenn sie bereits existieren, von LibreOffice aus nur gelesen,nicht geschrieben werden. Es gibt allerdings die Möglichkeit, sie von der HSQLDB aus
zu definieren und zu speichern, dann können Sie auch beschrieben werden.
Informationen dazu finden Sie im Abschnitt „Texttabellen innerhalb einer internen
HSQLDB-Datenbank“ des Base-Handbuchs.

teilweise ist der Zugriff auf Adressbücher, z.B. von Thunderbird, möglich, die Daten können
aber nur ausgewertet werden, in das Adressbuch zu schreiben ist nicht möglich.

Arbeiten mit Datenbank-Dokumenten
Wir werden nun im Rest dieses Kapitels anhand eines Beispiels zeigen, wie in Base Datenbanken,
Tabellen, Abfragen und Relationen eingerichtet werden, wie Sie daraus Berichte erzeugen können
1 Bei MySQL bzw. MariaDB, die mehrere Speichersysteme unterstützen, sollten Sie normalerweise InnoDB
als Datenbanksystem wählen, das ältere MyIsam unterstützt keine Relationen.
8

Einführung in Baseund wie Sie von anderen Anwendungen aus auf die Daten zugreifen können. Das Beispiel ist vom
Datenumfang her sehr knapp gehalten, bietet aber aufgrund der Datenstruktur doch viele Möglichkeiten, die wesentlichen Grundprinzipien zu zeigen.
Wir werden das Beispiel in Schritten aufbauen, beginnend mit einer einzelnen Tabelle. Ein solches
Vorgehen ist für eine Einführung sinnvoll. Im Allgemeinen ist es aber wichtig, dass Sie sich den
Gesamtzusammenhang der Aufgabenstellung erst einmal gründlich erarbeiten, darauf aufbauend
Ihr Datenmodell erstellen und erst dann die Tabellen usw. definieren. Denn sonst laufen Sie Gefahr, dass Sie manches, was Sie definiert haben, wieder ändern müssen.

HinweisEs gibt in Base Befehle, die nur über das Kontextmenü erreichbar sind. Deshalb sei
hier extra darauf hingewiesen, dass man das Kontextmenü ohne Maus mit
Umschalt+F10 erreicht. Weitere Tastaturkürzel für die Arbeit ohne Maus finden Sie
im Anhang A – Tastaturkürzel dieses Handbuchs.

Beschreibung des Beispiels
Wir wollen den Inhalt einer Sammlung mit klassischer Musik in einer Datenbank erfassen, um in
Zukunft die Medien, auf denen ein Musikstück enthalten ist, schnell auffinden zu können.
Wir werden das Beispiel in mehreren Schritten behandeln:
1. Erstellen des Datenbank-Dokuments und der Datenbank
2. Erfassung der Medien (CDs, DVDs, …): wir definieren die erste Tabelle und zwei Formulare
für die gleichen Daten, die für unterschiedliche Zwecke jeweils besser geeignet sind. Dieser
erste Schritt ist gleichzeitig ein Beispiel für eine bereits in sich abgeschlossene Anwendungvon Base.
3. Erfassung der Werke: Hier haben wir eine zweistufige Struktur, erst möchten wir den
Komponisten definieren, dann seine Werke: wir definieren die beiden Tabellen, die Relation
zwischen ihnen und ein zweistufiges Formular. Das ist ein leicht übertragbares Modell füreine zweistufige Datenbank.
4. die Zuordnung der Werke zu den Medien, auf denen sie bei uns enthalten sind: wir
definieren die dazu nötige Relation und erweitern dann das zweistufige Formular.
5. Erstellen von Berichten basierend auf den Daten der Datenbank
6. Als Ausblick auf weitergehende Möglichkeiten erweitern wir dann das Formular um
zusätzlichen Komfort.
7. Zum Abschluss gehen wir noch auf Zugriffe auf die Daten von anderen Anwendungen ein
Das Beispiel hat, wenn der Schritt 4 erreicht ist, schon einen gewissen Grad an Komplexität, bietet
aber dafür auch die Möglichkeit, die wesentlichen Konzepte vorzustellen, und ist andererseits aberauch ein „minimaler“ Fall einer Anwendung, bei der der Vorteil des Einsatzes einer Datenbank
offensichtlich sein dürfte.

Abgrenzung zu Calc
Die Tabellen laut den Schritten 2 und 3 ließen sich noch recht gut in Writer oder Calc abbilden. Im
Falle der zweistufigen Tabelle zeigte sich allerdings schon das Problem, dass man entweder die
Komponisten-Daten in allen Zeilen wiederholen müsste, was bei einer notwendigen Änderung
durch Ausfüllen zwar auch schnell lösbar, aber doch fehleranfällig wäre, da man das vergessen
kann, oder man die Daten nur in der ersten Zeile eintragen würde, was aber bei Auswertungen derDaten problematisch wäre und auch beim Einfügen einer neuen ersten Zeile. Wirklich überzeugend zeigen sich die Vorteile einer Datenbank aber in der in Schritt 4 beschriebenen Ausbaustufe,
bei der Sie sich schon schwertun, sie in Calc abzubilden, vor allem müssen Sie dann dauernd aufArbeiten mit Datenbank-Dokumenten

9

passen, dass bei neuen Einträgen auch alle Querbezüge übernommen oder eingetragen werden,
was bei der andersartigen Konstruktion einer Datenbank-Anwendung automatisch gegeben ist.
Calc ist prinzipiell auf die individuelle Behandlung einer Zelle ausgerichtet, auch wenn Sie durch
Kopieren mehrere Zellen gleichartig behandeln können. Wenn Ihr Problem eine solche individuelle
Behandlung erfordert, dann ist Calc ein wunderbares Werkzeug. Wenn es jedoch eher eine
Anwendung mit gleichartig strukturierten Datensätzen ist, dann kann Calc seine Stärken gar nicht
ausspielen, andererseits ergeben sich dann in der Regel weitere Anforderungen wie verschiedene
Sichten auf die Daten, mehrere Auswertungen usw., die mit einer Datenbank wesentlich leichter zu
lösen sind.

Anlegen einer Datenbank
Genaugenommen erstellen Sie hier ein Datenbank-Dokument, eine Datei, die vielfältige Informationen enthält, vor allem:•

zur Struktur der Datenbank und zum Zugriff darauf, im Falle einer eingebetteten (internen)
Datenbank auch die Daten selbst•

wenn Sie das erstellt haben: Formulare zum Anzeigen und, wenn möglich, Verwalten der
Daten

•

wenn Sie das erstellt haben: (Programme zum Erzeugen von) Berichten.

•

Ggf. auch Programmlogik für das Prüfen und Verarbeiten von Eingaben und Aktionen; das
ist ein wesentlicher Aspekt von Datenbankanwendungen, so etwas ist praktisch immer notwendig und kann eventuell sehr umfangreich sein. Eine knappe Einführung in die Programmierung von Makros bietet das Kapitel 13 „Einführung in Makros“ dieses Handbuchs.

Dies ist ein Dokument mit der Endung .odb.

Starten des Datenbank-Assistenten
Wählen Sie Datei → Neu → Datenbank oder das Datenbanksymbol im Menü des Symbols Neu inder Standardsymbolleiste oder das Symbol Base Datenbank im Abschnitt Erstellen: der Startseite
von LibreOffice Base. Sie erhalten dann das Start-Fenster des Datenbank-Assistenten (Abbildung
1).

10

Einführung in Base

Abbildung 1: Der Start-Dialog des Datenbank-Assistenten

Schritt 1: Datenbank auswählen
Wir wollen, wie oben gesagt, eine neue Datenbank unter Verwendung des mitgelieferten Datenbanksystems HSQLDB erstellen, weil dazu kein zusätzlicher Aufwand bezüglich Installation eines
Datenbanksystems und des Zugriffs darauf notwendig ist und Sie das Beispiel ggf. sofort nachvollziehen können. Sobald Sie ein Datenbank-Dokument angelegt haben, ist das weitere Vorgehen
auch prinzipiell für alle Datenbanksysteme gleich bis auf Feinheiten z.B. bei den zur Verfügung
stehenden Datentypen. Wenn Sie also bereits beim Einstieg in die Thematik ein anderes Datenbanksystem verwenden wollen, dann sollten Sie für die Verwendung des Datenbank-Assistenten
die Ausführungen im Base-Handbuch berücksichtigen, danach können Sie aber alles im Folgenden Beschriebene mit minimalen Abweichungen genauso nachvollziehen.
Die Option für eine interne Datenbank ist standardmäßig voreingestellt.
Bei Wahl dieser Option wird die Datenbank innerhalb der im Folgenden erstellten Datei abgelegt,s. dazu „Interne und externe Datenbanken“ auf Seite 5.
Die beiden anderen Optionen sind:•das Öffnen einer bestehenden Datenbankdatei, d.h. eines Datenbank-Dokuments: Dies ist
eigentlich im Widerspruch zur gewählten Aktion des Anlegens einer neuen Datenbank, aberdoch eine Abkürzung, falls Sie sich vertan haben. Sie können aus der Liste der zuletzt
verwendeten Dateien wählen oder im Dateimanager eine Datei auswählen.

•

das Erstellen eines Datenbank-Dokuments mit Ablage der Daten in einer aus Sicht vonBase externen Datenbank oder einer sonstigen Datenquelle. Zu externen Datenbanksystemen s. „Interne und externe Datenbanken“ auf Seite 5.
Hier können Sie aus mehreren Möglichkeiten wählen, Näheres finden Sie im Base-Handbuch. Die externe Datenbank oder sonstige Datenquelle muss in diesem Fall bereits erstellt
sein.

Anlegen einer Datenbank

11Schritt 2: Anmelden, Speichern
Klicken Sie auf Weiter >> oder betätigen Sie Eingabe, es wird Abbildung 2 angezeigt:

Abbildung 2: Datenbank-Assistent, Schritt 2
Sie können nun entscheiden, ob die Datenbank (genaugenommen das Datenbank-Dokument) angemeldet werden soll; teilweise wird dafür auch der Begriff registriert verwendet. Diese Anmeldung
bedeutet, dass sein Name und Pfad in eine Liste eingetragen wird, so dass Sie das DatenbankDokument auch über den Namen ansprechen können. Das ist notwendig, wenn Sie die durch das
Dokument beschriebene Datenbank als Datenquelle in anderen Modulen von LibreOffice nutzenwollen (nur angemeldete Quellen werden dort angezeigt), z.B. für Serienbriefe oder eine Auswertung mit Calc. Es ist aber auch sinnvoll, wenn Sie über Makros auf die Datenbank zugreifen wollen, denn dann können Sie den Speicherplatz ändern, ohne im Makro Änderungen vorzunehmen,
weil über den Namen der Speicherort ermittelbar ist.
Die Anmeldung ist also normalerweise zu empfehlen, aber weil die Datenbank, die wir erstellen,
nur ein Testbeispiel ist, könnten wir auf die Anmeldung verzichten. Das spätere Aufräumen besteht
dann nur im Löschen der Datei, der Eintrag in der Liste der angemeldeten Datenbanken mussdann nicht extra gelöscht werden.
In „Datenquellen in LibreOffice verwenden“ auf Seite 60 verwenden wir allerdings die Datenbank
als Datenquelle, wofür sie angemeldet sein muss. Wenn Sie auch das nachvollziehen wollen, ist
die Anmeldung an dieser Stelle angebracht.

HinweisDie Anmeldung können Sie auch später jederzeit über Extras → Optionen →LibreOffice Base → Datenbanken nachholen. Klicken Sie auf Neu, im folgenden
Dialog wählen Sie die Datei über das Verzeichnis aus, der Dateiname wird als Name
der Datenquelle vorgeschlagen, Sie können aber auch einen anderen Namenvergeben.

Sie können außerdem noch wählen, ob die Datenbank anschließend zum Bearbeiten geöffnet
werden soll, was normalerweise sinnvoll ist, wir müssen ja meist noch einiges ergänzen, und ob
sofort in das Erstellen einer Tabelle gesprungen werden soll, was wir nicht wünschen, weil wir erst
das Startfenster einer Datenbank anschauen wollen.

12

Einführung in BaseKlicken Sie nun auf Fertigstellen. Es öffnet sich ein Dateimanager, in dem Sie den Namen und den
Speicherort des neuen Datenbank-Dokuments festlegen können. Base-Dateien erhalten, wiegesagt, die Endung .odb, unsere Beispieldatenbank nennen wir „DB_Klassik“.

Interne und externe Datenbanken
Die Daten einer internen Datenbank werden im Datenbank-Dokument gespeichert. Das hat den
Vorteil, dass Sie das Dokument mitsamt den Daten ganz einfach auf einen anderen Rechnerübertragen können, es ist sofort einsatzbereit. Und Sie können ohne weitere Installation sofort
loslegen.
Eine interne Datenbank hat andererseits den Nachteil, dass nur ein Nutzer die Datenbank zum
Schreiben öffnen kann, weitere Nutzer können die Daten dann nur lesen. Ein weiteres Problem ist,
dass die HSQLDB-Datenbank erst dann wieder in einen dauerhaften, konsistenten Zustand gebracht wird, wenn Sie das Dokument schließen, selbst wenn Sie zwischendurch das Dokument
gespeichert haben; Abstürze, die nicht durch die automatischen Sicherungskopien wiederhergestellt werden können, sind zwar selten, aber es können dadurch Daten verloren gehen oder imschlimmsten Fall die Datenbank in der aktuellen Version nicht mehr aufrufbar sein, so dass Sie auf
eine frühere Kopie zurückgreifen müssen.
Bei externen Datenbanken ist jede Änderung, die im Datenbank-Dokument abgeschlossen ist,auch schon im Datenbanksystem durchgeführt, die Sicherung der Daten obliegt dann dem Datenbanksystem, das in der Regel ausgefeiltere Sicherungstechniken kennt als die Datenbank-Datei.
Bei echten Datenbanken ist auch der schreibende Zugriff durch viele Benutzer kein Problem. Bei
großen Datenmengen ist außerdem die Speicherung im Dokument an sich schon problematisch;auch dürften die Zugriffszeiten aufgrund des größeren verfügbaren Umfangs an Zugriffstechniken
bei externen Datenbanksystemen meist besser sein.
Zögern Sie also nicht, für echte Anwendungen ein externes Datenbanksystem einzusetzen, wenn
Sie Gründe finden, die für ein solches sprechen. Die Installation des Systems und eventuell eines
Treibers für den Zugriff erfordert normalerweise keinen großen Aufwand. Einzelheiten finden Sie im
Base-Handbuch.
Wenn Sie ein externes Datenbanksystem verwenden, müssen Sie zumindest die Datenbank selbst
in diesem System anlegen, damit Sie beim Anlegen des Datenbank-Dokuments darauf Bezug nehmen können. Bei den weiteren Schritten können Sie viele dann genauso gut im Datenbanksystem
durchführen wie in Base, das die Definitionen weitergibt.

Das Startfenster eines Datenbank-Dokuments
Nach dem Öffnen eines Datenbank-Dokuments sehen Sie das Startfenster (Abbildung 3). Für die
Abbildung wurde das Fenster wegen der Lesbarkeit soweit von rechts und unten verkleinert, dassgerade noch alle Texte unverkürzt sichtbar sind, die Abschnitte sind also ungewöhnlich klein.

Das Startfenster eines Datenbank-Dokuments

13

Abbildung 3: Startfenster eines Datenbank-Dokuments
In der linken Spalte Datenbank sehen Sie Symbole für die vier grundsätzlichen Aufgabenbereichebei der Bearbeitung eines Datenbank-Dokuments. Beim Starten des Fensters wird standardmäßig
das Symbol für den Bereich „Formulare“ ausgewählt, weil dieser der häufigste Zugang zu den
Daten darstellt. Wir haben in der Abbildung bereits das Symbol für den Aufgabenbereich „Tabellen“
ausgewählt.
Im viergeteilten großen Aufgabenbereich rechts davon werden im linken unteren Quadranten (inder Abbildung noch leer) alle Objekte aufgelistet, die zum jeweils gewählten Aufgabenbereich
gehören. Im linken oberen Quadranten werden die Aufgaben angeboten, die für diesen
Aufgabenbereich zur Verfügung stehen. Wir werden im weiteren Verlauf Beispiele dafür
kennenlernen.
Im rechten oberen Quadranten wird ggf. eine Beschreibung angezeigt, wenn Sie mit der Maus auf
eine Aufgabe zeigen, im rechten unteren können Sie eine Vorschau des Objekts anzeigen, wenn
Sie die entsprechende Option in der Auswahlliste gewählt haben. Die Anzeige ist oft unvollkommen
und wird erst korrigiert, wenn Sie das Fenster leicht in der Größe ändern.
Die vier Aufgabenbereiche werden wir in den folgenden Abschnitten im Zusammenhang mit
unserem Beispiel näher erläutern:

•
•
•
•

Tabellen gleich im Anschluss und später, Relationen ab „Relationen“ auf Seite 28.
Abfragen in „Abfragen“ ab Seite 31
Formulare in „Formulare“ ab Seite 18 und im Folgenden noch öfters
Berichte in „Berichte“ ab Seite 40

Verwaltung von Tabellen
Wählen Sie ggf. den Aufgabenbereich „Tabellen“. Da in dieser Datenbank noch keine Tabellenangelegt wurden, ist der linke untere Quadrant, der jetzt die Überschrift „Tabellen“ trägt, noch leer
(Abbildung 3).

14

Einführung in BaseVon den drei genannten Aufgaben wählen wir die erste, die Erstellung einer Tabelle in der
Entwurfsansicht. Die beiden anderen sind:•

Erstellen einer Tabelle unter Verwendung eines Assistenten: hier werden Ihnen einige
Muster-Tabellen mit Datenfeldern angeboten, aus denen Sie sich jeweils Felder für Ihre
eigene Datenbank herauspicken können. Dies kann Ihnen Arbeit ersparen, wenn Sie
einfach mal das Anlegen von Tabellen grundsätzlich ausprobieren wollen und die genauen
Feldbeschreibungen nicht so wichtig sind. Wenn Sie aber genauer wissen, was Sie
brauchen, gilt: Bevor Sie da nach einem geeigneten Feld suchen und das ggf. nochanpassen, haben Sie schneller eins definiert, das genau Ihren Vorstellungen entspricht.

•

Das Erzeugen einer Ansicht behandeln wir im Zusammenhang mit Abfragen (s. „Abfragen“
auf Seite 31)

Primärschlüssel
Beim Erstellen dieser Tabelle, egal, ob mit oder ohne Assistenten, gilt es nun ein Thema zu berücksichtigen, das Sie zunächst gar nicht bemerken, denn Sie werden erst beim Speichern der Tabellenfelder darauf aufmerksam gemacht, wo das dann für einen Anfänger überraschend kommt.
Tabellen in einer relationalen Datenbank sollten in der Regel einen Primärschlüssel haben; dasinterne Datenbanksystem HSQLDB, mit dem wir ja arbeiten, macht das sogar zur Pflicht.
Ein Primärschlüssel dient zur eindeutigen Identifizierung eines Datensatzes; diese wird benötigt,
um von anderswo ausgehend auf diesen Satz zuzugreifen. Ein Primärschlüssel kann aus eineroder mehreren Spalten einer Tabelle bestehen. Das Datenbanksystem sorgt dann dafür, dass Sie
keinen zweiten Satz mit gleichem Inhalt im Primärschlüssel in die Tabelle aufnehmen können.
Selbst wenn ein Datenbanksystem einen Primärschlüssel nicht zur Pflicht machen sollte, ist er inaller Regel zu empfehlen, aber damit befinden wir uns im Bereich des Datenbank-Designs, dernicht Inhalt einer Base-Einführung sein kann.
Für den Primärschlüssel sollten nur Felder verwendet werden, deren Inhalt sich normalerweise
nicht ändert, weil eine Änderung von Primärschlüsseln wegen der Beziehungen zu anderen Tabellen zumindest aufwändig, wenn nicht gar sehr schwierig ist. Ein Schlüssel, der sich dafür anbietet,
wäre z.B. die ISBN im Buchhandel. Bei noch nicht entsprechend durchorganisierten Situationen
fehlt eine solche Identifikation. Man verwendet daher häufig einen künstlichen Primärschlüssel,
eine Spalte, die eine Zahl enthält, die vom Datenbanksystem einfach in aufsteigender Folge
vergeben wird, ohne dass man sich darum kümmern muss. Auf diese Spalte, die sich inhaltlich nieändern muss, verweisen dann Relationen mit anderen Tabellen. Das hat auch den Vorteil, dass Sie
nur die Datenfelder des Datensatzes ändern müssen, wenn Sie sich vertippt haben, und nicht den
Primärschlüssel und alle Relationen zusätzlich.
Vor dem Speichern der Tabelle wird daher geprüft, ob ein Primärschlüssel vorhanden ist, und ggf.
vorgeschlagen, dass er vom Programm erzeugt wird. Besser ist es jedoch, wenn Sie sich vorherüberlegen, was als Primärschlüssel geeignet ist, daher steht dieser Abschnitt vor der Definition derTabelle.
Ein Primärschlüssel löst automatisch die Erstellung eines Index aus (eine vom Datenbanksystemverwaltete Tabelle, die den Schlüssel und den Speicherort des zugehörigen Satz beinhaltet, sodass der Satz ohne sequentielles Suchen schnell geliefert werden kann), da man ja über den
Primärschlüssel sehr häufig und daher auch möglichst schnell zugreifen muss.
Bei unseren Medien, die z.T. recht alte Schallplatten sein könnten, finden wir unter den vorhandenen Informationen keine eindeutige Identifikation, die wir als Primärschlüssel verwenden könnten,
daher verwenden wir einen künstlichen Schlüssel, den wir also als weiteres Feld bei der Definition
der Tabelle berücksichtigen müssen.

Verwaltung von Tabellen

15Tabelle erstellen
Wir haben das Erstellen einer Tabelle in der Entwurfsansicht gewählt. Es erscheint ein Fenster, indem wir die gewünschten Datenfelder (Spalten) mit ihren Eigenschaften eingeben können. Die
Abbildung 4 zeigt die bereits eingegebenen Daten.

Abbildung 4: Tabelle Medium

16•

Wir benötigen zwingend einen Primärschlüssel (s. „Primärschlüssel“ auf Seite 15). Wir
nennen das Feld MedienId, wählen als Typ „Integer“ (das bedeutet eine Ganzzahl mit bis
zu 10 Stellen [im Dezimalsystem]). Da es sich in unserem Fall um einen künstlichen
Schlüssel ohne sachliche Bedeutung handelt, nützen wir die genannte Möglichkeit, den
Inhalt vom System vergeben zu lassen (daher auch der Typ „Integer“, da es sich um ein
Feld handelt, in dem ganzzahlige Werte gespeichert werden), und setzen im unteren Teildes Fensters die Angabe Auto-Wert auf Ja.

•

Um das Feld als Primärschlüssel zu definieren, wählen wir es durch Klick in die erste Zelle
der Zeile aus (für einen Primärschlüssel aus mehreren Feldern können Sie weitere mit
Umschalt+Klick hinzufügen) und wählen im Kontextmenü Primärschlüssel. Als Ergebnis
wird vor dem Feld das Symbol eines gelben Schlüssels angezeigt, im Kontextmenü steht
vor dem Eintrag Primärschlüssel dann ein Haken.

•

Für den Medientyp setzen wir den Typ „Text (fix) [ CHAR ]“, die Länge setzen wir auf 2.
Dieser Feldtyp bedeutet, dass das Feld genau soviel Zeichen beinhalten kann, wie die
Länge angibt; wenn weniger eingegeben werden, wird mit Leerzeichen aufgefüllt. Bei den
Feldeigenschaften gibt es die Auswahl Eingabe erforderlich, für die wir die Wahl Ja treffen,
damit immer der Medientyp eingegeben werden muss.

•

Beim Erscheinungsjahr belassen wir den Typ bei „Text [ VARCHAR ]“und setzen die Länge
auf 4 Stellen. Dieser Feldtyp bedeutet, dass das Feld maximal soviel Zeichen beinhaltenkann, wie die Länge angibt; wenn es weniger sind, werden auch nur die benötigten Zeichen
gespeichert.

•

Für den Medientitel ist die vorgeschlagene Standard-Maximallänge von 100 vielleicht etwas
zu kurz, wir wählen beispielsweise 300. Aufgrund der Angabe VARCHAR werden nur die
notwendigen Zeichen gespeichert. Auch hier wählen wir für Eingabe erforderlich Ja.

•

Für das Bild des Covers, das wir speichern möchten, müssen wir den Typ
Bild [ LONGVARBINARY ] verwenden. In der Datenbank wird dann tatsächlich das Bild

Einführung in Basegespeichert, nicht bloß ein Verweis auf den Speicherort, der ja bei Verschieben der
Speicherung Probleme machen könnte. Für Eingabe erforderlich setzen wir hier Nein, dennnicht für alle Medien wollen wir gezwungen werden, gleich ein Bild des Covers zu liefern.
Speichern Sie Ihre Eingaben (dabei müssen Sie einen Namen für die Tabelle vergeben, in
unserem Fall „Medium“), schließen Sie das Fenster, und speichern Sie vorsichtshalber auch imStartfenster von Base, denn nur dann sind die Änderungen auch im Datenbank-Dokument
dauerhaft gespeichert.

Datenanzeige und -verwaltung in der Tabellensicht
Der linke untere Quadrant des Aufgabenbereichs zeigt nun einen Eintrag, die Tabelle „Medium“.
Über das Kontextmenü können Sie nun verschiedene Verwaltungsaufgaben aufrufen, u.a. über„Öffnen“ oder auch Doppelklick auf den Tabellennamen die Anzeige und Verwaltung der Daten derTabelle.
Sie sehen ein Bild ähnlich dem Ausschnitt in Abbildung 5, oberer Teil.

Abbildung 5: Tabelle: vor und nach Dateneingabe
Die erste Zeile der Tabelle ist mit einem goldgelben Strahlenkranz gekennzeichnet, dem Kennzeichen für die Eingabezeile, nur in dieser Zeile, können Sie neue Sätze erfassen. Das grüne Dreieckzeigt an, dass diese Zeile ausgewählt ist.
Für die Spalte „MedienId“ hatten wir Auto-Wert gewählt, daher erscheint nun dort die Kennzeichnung „<AutoFeld>“, und das Feld ist nicht eingabebereit.
Im unteren Teil von Abbildung 5 sind die Daten des ersten Satzes bereits eingetragen: Sie sehen
die Datenfelder, die Sie definiert haben, als Spalten einer Tabelle, in Zeilen werden Datensätze mit
ihren Inhalten angezeigt. Die Zeile, in der Sie gerade Einträge vorgenommen haben, wird nun
durch einen Stift markiert, dem Zeichen, dass in dieser Zeile etwas geändert wurde, die Zeile
darunter ist nun die neue Eingabezeile (für neue Datensätze).
Sobald Sie in einer Zeile etwas geändert haben (der Stift erscheint) und dann in eine andere Zeile
wechseln – ob durch Pfeiltasten nach-unten oder nach-oben, den Tabulator oder durch Klicken
anderswohin – wird die Änderung in der Zeile, in unserem Fall also die Neuaufnahme eines
Satzes, in der Datenbank gespeichert. Sie sehen dann im Feld „MedienId“ den automatischvergebenen Wert, in unserem Fall 0, weil es der erste Datensatz ist. Die Speicherung können Sie
auch durch Bearbeiten → Aktuellen Datensatz speichern oder das zugehörige Symbol
auslösen.

Formulare: erster Einstieg
In vielen Fällen – besonders, wenn Sie wie in unserem Beispiel, so weit wir es bisher ausgeführt
haben, nur eine einzelne Tabelle haben – können Sie mit der direkten Verwaltung einer Tabelle,
wie im vorigen Abschnitt gezeigt, Ihre Daten bereits recht gut verwalten. Aber vielleicht ist Ihnen
bereits aufgefallen, dass wir ein Feld des Datensatzes nicht behandelt haben, nämlich das Bild desFormulare: erster Einstieg

17

Covers. Dies hat seinen Grund: Das universelle Werkzeug der direkten Verwaltung einer Tabelle
kann nicht alle Besonderheiten einer einzelnen Anwendung abdecken, es beschränkt sich daher
auf die grundsätzlichen Bedürfnisse der Datenverwaltung. So hat man u.a. auch die Behandlung
von Bildern, die man ja in der tabellarischen Form wie in Abbildung 5 gar nicht vernünftig darstellen
könnte, der einzelnen Anwendung überlassen. Dies gilt übrigens genauso für die in „Tabellarisches
Formular“ auf Seite 25 vorgestellten Formulare. Aber es gibt auch viele andere Situationen, bei
denen höhere Sicherheit und größerer Komfort auf Anwendungsebene erreicht werden können.
Zur Unterstützung dieser Ziele wurde das Konzept der Formulare erschaffen. Wir werden beispielhaft zwei unterschiedliche Typen von Formularen erzeugen, die für unterschiedliche Zwecke optimiert sind, aber beide (in bescheidenem Umfang, wir haben aufgrund der wenigen Datenfelder
auch nicht sehr viel Auswahl) mehr Komfort und Sicherheit bieten als die direkte Dateneingabe.

Formulare
Formulare haben ihren Namen deshalb, weil sie in einer ihrer möglichen Formen tatsächlich an ein
Formular erinnern, wie es z.B. bei Behörden verwendet wird, nämlich eine Anordnung von Feldern,in die etwas eingetragen wird, mitsamt der jeweiligen Feldbezeichnung. Base-Formulare können
jedoch weitaus mehr, wie wir im Rest dieses Kapitels noch sehen werden:•

In einem Formular können Sie die Darstellung der Feldinhalte festlegen, z.B. die Anzahl derangezeigten Nachkommastellen bei numerischen Feldern oder die Datumsdarstellung•

Sie können ohne Programmierung einfache Prüfungen oder Wertvorgaben festlegen•Sie können die Daten mehrerer Tabellen anzeigen, die miteinander verknüpft sind, so dassbeim Wechsel zu einem anderen Datensatz alle verknüpften Daten automatisch neu
angezeigt werden.

•

Mit Makros können Sie weitergehende Prüfungen und Verarbeitungslogiken realisieren•

Aus den Makros können Sie auch selbst definierte Dialoge aufrufen, in denen komplexe
Dateneingaben, z.B. mit Auswahllisten oder Optionsauswahlen, abgefragt werden, diewieder das weitere Vorgehen steuern

Formulare sind daher das zentrale Mittel zur Arbeit mit Datenbanken, daher wird auch beim Aufruf
einer Base-Datei automatisch der Aufgabenbereich „Formulare“ angezeigt.
Der Begriff „Formular“ wird leider in LibreOffice in zweierlei Hinsicht verwendet. Er
bezeichnet

Hinweis1. das Formular-Dokument, also einen Eintrag, den Sie im Aufgabenbereich„Formulare“ des Startfensters (s. „Das Startfenster eines DatenbankDokuments“ auf Seite 13) finden.
2. einen Bestandteil des Formular-Dokuments, nämlich eine Einheit, die mit(höchstens) einer Datenbanktabelle, einer Ansicht oder einer Abfrageverknüpft ist.

Erzeugen eines Formular-Dokuments
Sie können ein Formular-Dokument auf zwei Wegen erzeugen:
Formular unter Verwendung des Assistenten erstellen...
Der Assistent führt Sie durch die notwendigen Schritte, so dass alle Möglichkeiten abgefragt
werden. Er ist allerdings beschränkt auf höchstens zwei Stufen – Hauptformular und Unterformular –, wenn Sie mehr benötigen, müssen Sie in der Entwurfsansicht weiterarbeiten. Aberauch, wenn Sie mehr als diese zwei Stufen benötigen, ist es normalerweise sinnvoll, den
Anfang über den Assistenten zu erledigen, weil Sie damit am schnellsten zum Ziel gelangen,18

Einführung in Baseund nur die restlichen Schritte über das Ändern des Formulars zu erledigen.
Für unseren Fall einer einzelnen Tabelle ist der Assistent auf jeden Fall ausreichend.
Formular in Entwurfsansicht erstellen…
Bei dieser Auswahl müssen Sie schon einigermaßen über die Möglichkeiten von Formularen
Bescheid wissen, um ähnlich schnell wie mit dem Assistenten ein Ergebnis zu erreichen. Sie
empfiehlt sich also nicht für den ersten Einstieg.
Die Arbeit mit der Entwurfsansicht wird uns aber beim Ausbau des Beispiels ohnehin
begegnen.

Erzeugen des Formulars mit dem Assistenten
Wir werden zunächst ein Formular-Dokument für die Anzeige und Verwaltung eines einzelnen
Mediums erzeugen, denn nur bei dieser Form haben wir die Möglichkeit, das Bild für das Coverhinzuzufügen, wie wir im anschließenden Abschnitt sehen werden.

Tipp

Im Vordergrund sehen Sie den Assistenten mit den einzelnen Schritten, wo Sie Ihre
Eingaben machen können, im Hintergrund das bis dahin erzeugte Ergebnis. Wennetwas nicht Ihren Absichten entspricht, benützen Sie die Schaltfläche < Zurück, um
eine andere Auswahl zu treffen.

1. Wählen Sie „Formular unter Verwendung des Assistenten erstellen“.
2. Im 1. Schritt können Sie unter Tabellen und Abfragen die gewünschte Tabelle wählen
(Abfragen haben wir noch nicht definiert und behandelt); wählen sie – natürlich – „Medium“.
3. In der Liste Verfügbare Felder erscheinen nun alle Felder der Tabelle „Medium“. Mit den
Symbolen >, >>, <, << können Sie die Auswahl der im Formular zu zeigenden Felder
bestimmen, indem Sie sie in die Liste der Felder im Formular aufnehmen oder sie daraus
entfernen.
4. Wählen Sie (Abbildung 6) das Symbol >>, um alle Felder im Formular zu zeigen. Wir benötigen ja grundsätzlich alle Felder außer evtl. dem künstlichen Primärschlüssel MedienId,
den man je nach Geschmack zur Information zeigen oder als störend unterdrücken kann.
Wählen sie dann Weiter >.
5. Wir haben noch kein Unterformular, das verwenden wir erst in „Mehrstufige Formulare“ aufSeite 27, daher wählen wir Weiter >, ohne den Haken beim Unterformular zu setzen.
6. Im darauffolgenden Schritt können Sie die grundsätzliche Darstellung des Formulars (undggf. eines Unterformulars) entscheiden: Darstellung jeweils eines einzelnen Satzes mit
Anordnung der Felder in unterschiedlichen Formen oder tabellarische Darstellung mehrerer
Sätze (ähnlich der Verwaltung einer Tabelle).
Wir wählen die links stehende Darstellung, die die Beschriftung eines Feldes links vondessen Inhalt anzeigt, und Weiter >.
7. Im darauf folgenden Schritt ändern Sie zunächst einmal gar nichts; mit diesen Angabenkönnen Sie beeinflussen, ob ein Formular zum Anlegen, Ändern oder Löschen vonDatensätzen verwendbar ist. Ändern Sie hier nichts, bevor Sie nicht tiefere Einsichten
gewonnen haben. Betätigen Sie Weiter >.
8. Hier können Sie die Darstellung des Formulars beeinflussen; probieren Sie eventuell aus,
wie sich die Wahl der Farbe und der Feldumrandung auswirken, und betätigen Sie dannWeiter >.

Formulare: erster Einstieg

19

Abbildung 6: Formular-Assistent: Felder
9. Im letzten Schritt werden Sie aufgefordert, dem Formular einen Namen zu geben (wirsetzen „Medium_einzeln“), und Sie können entscheiden, ob Sie gleich mit dem Formulararbeiten wollen, oder das Formular weiter verändern wollen, was bei einiger Kenntnis vonFormularen häufig der Fall sein wird, um Verbesserungen des Formulars vorzunehmen, dieder Assistent nicht bietet. Wir werden einige Beispiele im Folgenden kennenlernen.
Wir wählen aber hier das sofortige Arbeiten mit dem Formular, weil wir ja erst einmal prüfen
wollen, wie sich mit dem Ergebnis unserer Entscheidungen arbeiten lässt.
10. Speichern Sie am besten auch gleich das Dokument im Startfenster von Base.

Formular verwenden
Es wird das Formular-Dokument entsprechend Abbildung 7 angezeigt.

20

Tipp

Bei einem einfachen Formular wie diesem ist wichtig, dass die Symbolleiste für die
Navigation im Formular, wie in Abbildung 7 im Fuß, eingeblendet ist. Dies mag
aufgrund früherer Aktionen in Ihrem System eventuell nicht der Fall sein. Wählen
Sie, wenn Sie die in Abbildung 7 unten abgebildeten Symbole nicht sehen, Ansicht→ Symbolleisten → Navigation (der Haken davor müsste, wenn Sie die Symbolleiste nicht sehen, nicht vorhanden sein), um die Symbolleiste zu aktivieren.

HinweisBei komplizierteren Formular-Dokumenten sind evtl. Navigationsleisten für einzelne
Formulare aktiv, so dass die globale Navigationsleiste überflüssig ist.

Einführung in Base

Abbildung 7: Formular Medien einzeln
Sie sehen den einzigen bisher in der Datenbank erfassten Satz, wie Sie an der Meldung„Datensatz 1 von 1“ in der Navigationsleiste sehen können, die MedienId ist 0.
Rechts von dieser Meldung finden Sie die Navigationssymbole, mit denen Sie, in der Reihenfolge
von links nach rechts, zum ersten, vorigen, nächsten oder letzten Satz springen; das rechtestedieser fünf Symbole („Neuer Datensatz“), die Kombination von Nächster Datensatz undStrahlenkranz (wir kennen das Symbol bereits aus „Datenanzeige und -verwaltung in derTabellensicht“ auf Seite 17), dient dazu, das Formular zu leeren, so dass ein neuer Datensatz
eingegeben werden kann.
Die nächsten drei Symbole dienen zum Speichern der eingegebenen Daten, zur Rücknahme derEingabe in diesem Formular (alle Felder werden geleert) und zum Löschen eines Datensatzes.
Die restlichen Felder der Navigationsleiste, die Sie bei den ersten Schritten mit Base noch nicht
benötigen, finden Sie im Base-Handbuch erklärt. Alle Symbole haben auch einen Tooltipp-Text, dererscheint, wenn Sie mit der Maus auf das Symbol zeigen (oder ohne Maus bei einem Symbol, dasden Fokus hat, Umschalt+F1 betätigen).
Den Datensatz können Sie nun durch Eingaben in den einzelnen Feldern ändern. Mit dem Symbol
Datensatz speichern können Sie die vorgenommenen Änderungen speichern, ebenso durch
Wechseln zu einem anderen Satz.

Neuer Datensatz
Durch das Symbol Neuer Datensatz (die Kombination von Nächster Datensatz und Strahlenkranz)
wird das Formular zur Eingabe eines neuen Datensatzes geleert. Geben Sie die benötigten
Datenfelder ein. Um im Feld „MedienBild“ etwas einzugeben, müssen Sie das Feld doppelklicken.
Es öffnet sich dann ein Standard-Dialog zur Auswahl einer Datei, in dem Sie den Speicherort der

Formulare: erster Einstieg

21

betroffenen Datei angeben können. Daraufhin wird der physische Inhalt der Bild-Datei in derDatenbank gespeichert.

Abbildung 8: Dateneingabe; Einfügen eines Bildes
Speichern Sie nun den Datensatz.

Bearbeiten des Formulars
Sie sehen nun schon an diesem Beispiel, dass das generierte Formular zwar einwandfrei funktioniert, aber eventuell angepasst werden muss. Störend ist vor allem die Form des Feldes für das
Bild, denn unser quadratisches Bild wird zwar vollständig angezeigt, kann aber dadurch das
rechteckige Feld nicht ausfüllen.

Anpassen des grafischen Feldes
Für die Skalierung einer Grafik in einem solchen Feld haben Sie drei Möglichkeiten:
1. Nein: keine Skalierung bedeutet, dass bei einem größeren Bild nur ein kleiner Ausschnitt
gezeigt wird
2. Größenverhältnis beibehalten: das Bild wird so skaliert, dass es ohne Verzerrung voll im
Feld sichtbar ist, auch wenn dann eventuell Ränder übrigbleiben. Das ist bei uns der Fall,da das die Standardeinstellung ist.
3. Automatische Größe: das Bild wird so verzerrt, dass es das Feld völlig ausfüllt. In unserem
Fall wäre es dann auf doppelte Breite auseinander gezogen.
Da CD- und Plattencover quadratisch sind, sollten wir also das Feld ebenfalls quadratisch machen.
Dann wird das Bild zwar skaliert, aber es ergeben sich keine Verzerrungen, da beide Dimensionen
im gleichen Maßstab geändert werden.
Wählen Sie im Startfenster des Datenbank-Dokuments im Aufgabenbereich Formulare bei unserem Formular Kontextmenü → Bearbeiten… Es öffnet sich der Formular-Editor (Abbildung 9):22

Einführung in Base

Abbildung 9: Formular-Editor
Zu beachten ist nun, dass der Formular-Assistent immer ein Feld und seine Beschriftung zu einer
Gruppe zusammenfasst, was den Vorteil hat, dass man diese zusammengehörigen Objekte dann
automatisch zusammen verschiebt, wenn man das Formular ändern will. Für das Ändern eines
dieser Objekte ist es dann jedoch sinnvoll, die Gruppierung aufzuheben (alternativ können Sieüber Gruppe betreten das Objekt bearbeiten, ohne die Gruppierung aufzuheben). Wählen Sie nun
wie in Abbildung 9 Kontextmenü → Gruppe → Gruppierung aufheben. Optisch ändert sich nun
zunächst nichts, aber wenn Sie woandershin im Formular klicken und dann das grafische Feld
anklicken, können Sie es für sich allein auswählen.
Wenn Sie das Grafik-Feld ausgewählt haben, können Sie über Kontextmenü → Kontrollfeld…
nun das Feld bearbeiten. Wählen Sie im sich öffnenden Dialog ggf. den Reiter Allgemein aus.
Dann können Sie die Höhe und/oder Breite des Feldes und weitere Eigenschaften wie Position,
Form der Umrandung, die genannte Skalierung und vieles mehr verändern (die Anzahl derEigenschaften hängt vom Feldtyp ab). Wir ändern die Höhe auf den gleichen Wert wie die Breite(am einfachsten mit Kopieren und Einfügen).

Ein Listenfeld für den Medientyp
Als Beispiel für die zusätzlichen Möglichkeiten, die ein Formular bieten kann, möchten wir das Feld
für den Medientyp so einrichten, dass der Anwender nur Werte aus einer vorgegebenen Liste auswählen kann. Das bietet sich bei diesem Feld an, denn momentan haben wir nur drei Möglichkeiten vorgesehen („LP“, „CD“ und „DV“; das Feld hat nur zwei Stellen, wir speichern nur die Abkürzung), und andererseits ist zu erwarten, dass wir in einer Auswertung einmal nach dem Medientyp
suchen oder sortieren wollen, da wäre es ungünstig, wenn durch Fehleingaben andere Kürzel fürden Medientyp verwendet wurden, die wir dann nicht finden würden.
Für solche und ähnliche Aufgabenstellungen gibt es unterschiedliche Typen von Formularfeldern.
Wir besprechen nur den hier benötigten Typ eines Listenfeldes, die weiteren Typen werden im
Base-Handbuch beschrieben.

Formulare: erster Einstieg

23

Ein Listenfeld bietet dem Anwender wie gesagt eine Liste von möglichen Eingaben an, nur die angebotenen Inhalte sind erlaubt. Zusätzlich besteht noch die Möglichkeit, dass in der Tabelle ein
anderer Wert gespeichert werden kann als man an der Oberfläche sieht, ähnlich wie bei Papierformularen, wo man z.B. eine „0 für „männlich“ und eine „1“ für „weiblich“ eintragen musste; in einem
entsprechenden Online-Formular würde man den Langtext sehen, in die Datenbank würde aber
die Zahl geschrieben. Eine solche Unterscheidung zwischen sichtbarem und gespeichertem Wert
kann z.B. aus Gründen des Speicherplatzes, aber auch der einfacheren Abfrage sinnvoll sein. Die
Liste eines Listenfelds besteht daher aus Paaren von Werten, eben jeweils einem anzuzeigendem
und einem zu speichernden Wert.
Die Trennung des gespeicherten und anzuzeigenden Werts mag in diesem Fall ein wenig künstlich
wirken, weil man eigentlich immer mit den Abkürzungen arbeitet, aber bei einem weiteren Medientyp könnte die Situation schon anders sein; für Blue Ray Discs hat man auch noch keine geläufige
Abkürzung.
Der Formular-Assistent hat zunächst für jedes Datenbankfeld ein entsprechendes Formularfeld
vom Typ „Textfeld“ generiert, was die einfachste Form eines Eingabefelds darstellt. Um aus dem
Feld MedienTyp ein Listenfeld zu machen, wählen Sie Kontextmenü → Ersetzen durch →Listenfeld. (Sie müssen wahrscheinlich wieder die Gruppierung aufheben oder die Gruppe
betreten.) Anschließend können Sie über Kontextmenü → Kontrollfeld… die Eigenschaften desnun zum Listenfeld gewordenen Felds festlegen.
Es gibt nun zwei Möglichkeiten, die dazu benötigte Liste abzulegen:1. Sie speichern die Liste im Formular. Dies geht am schnellsten, hat allerdings den Nachteil,dass Sie die Liste erneut eingeben müssen, wenn Sie sie woanders noch einmal brauchen(und das ist bei unserem Beispiel der Fall, weil wir weitere Formulare erstellen werden, die
das Medium verwenden), und dass Sie Obacht geben müssen, dass die Listen an den verschiedenen Stellen konsistent bleiben. Diesen Weg wollen wir daher nicht vertiefen, aberzum besseren Verständnis zeigt Abbildung 10 die beiden Eingabefelder, in denen Sie dieangezeigten (links) und gespeicherten (rechts) Werte ablegen, natürlich in entsprechender
Reihenfolge (Beachten Sie, dass Sie links frei sind, beliebig lange Namen einzugeben,
während rechts die Beschränkung des Datenbankfeldes auf zwei Stellen gilt). Im rechten
Bildteil – Reiter Daten – wählen Sie dazu den Eintrag „Werteliste“.
Diese Möglichkeit können Sie aber z.B. in einem Writer-Dokument einsetzen, wenn Ihnen
die Datenbankunterstützung fehlt.

Abbildung 10: Listenfeld: "lokale" Liste
2. Da wir aber ohnehin mit einer Datenbank arbeiten, bietet es sich an, die Liste zentral in derDatenbank abzulegen. Wir definieren dazu eine neue Tabelle mit Namen „Medientyp“, diederzeit nur drei Einträge enthält, und viel mehr werden es kaum werden, s. Abbildung 11.
Das Feld medienTyp hat eine variable Länge, das Feld medienTypId eine feste Länge von
2. Die erste Spalte enthält die anzuzeigenden Werte, die zweite die in der Datenbanktabelle „Medium“ zu speichernden Werte.

24

Einführung in Base

Abbildung 11: Tabelle für Listenfeld
Um diesen zentralen Typ der Liste einzusetzen, wählen Sie im Reiter Daten den Inhalt„Tabelle“ (die drei folgenden, „Abfrage“, „SQL“, „SQL nativ“, wirken praktisch genauso, wirwerden das später für Abfragen an anderen Beispielen demonstrieren) und wählen im Feld
Listeninhalt den Eintrag „Medientyp“ (unsere neue Tabelle). LibreOffice erwartet dann, dassdie Tabelle in der ersten Spalte den anzuzeigenden und in einer (normalerweise anderen)den gespeicherten Wert enthält, so wie wir die Tabelle MedienTypId angelegt haben. Wenn
Sie eine Tabelle haben, bei der der gespeicherte Wert in einer anderen Spalte steht,
können Sie das durch Anpassen des Eintrags „1“ im Feld gebundenes Feld berücksichtigen; die Zählung beginnt wie oft in der Informatik bei 0, deshalb bezeichnet „1“ die zweite
Spalte. Der anzuzeigende Wert muss allerdings in der ersten Spalte stehen, wenn Ihre
Tabelle einen anderen Aufbau hat oder vielleicht sogar aus mehreren Tabellen abgeleitet
werden soll, können Sie die drei genannten weiteren Möglichkeiten nutzen, um eine
„Tabelle“ mit dem benötigten Aufbau daraus abzuleiten; die letzte Möglichkeit„Tabellenfelder“ ist ein Sonderfall. Wir werden in „Abfragen erstellen“ auf Seite 32 zwei
Abfragen zu genau diesem Zweck erstellen.
Wählen Sie nun noch im Reiter Allgemein im Feld Aufklappbar den Eintrag „Ja“, damit Sie
auch eine Auswahlliste sehen können. Verringern Sie eventuell auch die Breite des Felds.
Speichern und schließen Sie das Formular, speichern Sie am besten auch das Datenbank-Dokument. Öffnen Sie dann das gerade geänderte Formular-Dokument, um die Daten anzuzeigen.
Wenn Sie das Feld Medientyp auswählen, wird die Auswahlliste mit den eingetragenen (anzuzeigenden) Werten aufgeklappt. Wenn Sie nun zum zweiten Datensatz blättern, dann sehen Sie,dass auch das Bild nun das gesamte grafische Feld ausfüllt.

Tabellarisches Formular
Bei einer größeren Anzahl von Sätzen ist die gerade gezeigte Form eines Formulars oft unhandlich, weil man keinen größeren Überblick über die Sätze hat. Dann bietet sich als Alternative die
Darstellung der Sätze in tabellarischer Form, ähnlich wie in „Datenanzeige und -verwaltung in derTabellensicht“ auf Seite 17 an. Ein Formular mit Einzelfeldern ist aber trotzdem oft, gerade auch in
Kombination mit tabellarischen Formularen, sehr nützlich, in unserem Fall wegen der Möglichkeit,
ein Cover hinzuzufügen.

Erstellen mit dem Assistenten
Um ein tabellarisches Formular mit dem Assistenten zu erstellen, gehen Sie genauso vor wie in„Erzeugen des Formulars mit dem Assistenten“ auf Seite 19 beschrieben, nur wählen Sie im Schritt„5. Anordnung der Steuerelemente“ die tabellarische Darstellung.
Wenn Sie nun das Formular öffnen, dann werden Sie feststellen (Abbildung 12), dass kein Feld für
das Bild erscheint, obwohl Sie wie vorher alle Felder ausgewählt hatten. Der Assistent hat es automatisch entfernt, da das Bild in der Tabelle nicht angezeigt werden kann. Dass solche Grafiken intabellarischen Formularen nicht dargestellt werden können, wurde schon zu Beginn von„Formulare: erster Einstieg“ auf Seite 17 erwähnt.

Formulare: erster Einstieg

25

Abbildung 12: tabellarisches Formular
Sie sehen auch, dass der Fuß der Tabelle eine eigene Navigationsleiste besitzt, so dass Sie auf
die Navigationsleiste des Formulars eventuell verzichten können. Speichern erfolgt, wie gesagt,
beim Wechsel zu einem anderen Satz, löschen können Sie über das Kontextmenü einer Zeile.
Bei der Tabelle werden automatisch Rollbalken angezeigt, wenn nicht alle Zeilen oder Spalten im
Fenster Platz haben. Die Spaltenbreite können Sie temporär wie in Tabellen in Calc oder Writerdurch Verschieben der Trennlinie zwischen zwei Spalten mit der Maus verändern.Eine dauerhafteÄnderung erreichen Sie auf dem gleichen Weg im Formular-Editor.

Bearbeiten eines tabellarischen Formulars
Das Bearbeiten der Steuerelemente eines tabellarischen Formulars erfolgt ähnlich wie bei dem
bereits behandelten:•

Kontextmenü → Spalte…, wenn der Mauszeiger auf einen Spaltenkopf zeigt, dieÄnderung der Eigenschaften der Spalte.

•

Kontextmenü → Kontrollfeld… (wenn der Mauszeiger sich außerhalb der Spaltenköpfe
befindet) lässt die Änderung von Eigenschaften der Tabelle zu.

•

Kontextmenü → Formular… (wenn der Mauszeiger sich auf einem Steuerelement
befindet) ermöglicht die Änderung von Eigenschaften des Formulars, das dieses
Steuerelement enthält.

Bei einem vom Assistenten erstellten Formular ist vor allem die Sortierung zu beachten. Wenn Siehier keine Sortierung angeben, werden die Daten normalerweise in der Reihenfolge des Primärschlüssels geliefert, und der ist in unserem Falle ein automatisch vergebener Wert, die Datenwerden dadurch in der Reihenfolge ihrer Aufnahme in die Datenbank geliefert. Das ist in der Regelfür das Finden eines Mediums keine günstige Reihenfolge.
Wählen Sie daher Kontextmenü → Formular… → Daten (Abbildung 13) und klicken Sie beim
Feld Sortierung auf die Schaltfläche mit den drei Punkten, um den zugehörigen Dialog zu öffnen.
Wählen Sie als erstes Sortierfeld den Medientyp, als zweites den Medientitel (oder auch nur den
Medientitel allein, wenn Sie das bevorzugen). Schließen Sie dann den Dialog mit OK.
Wir können nun auch, mit dem gleichen Verfahren wie in „Ein Listenfeld für den Medientyp“ aufSeite 23, die Auswahlliste für die Spalte MedienTyp einrichten, wozu wir nun keine neue Liste mehr
eingeben müssen, die Ablage in der Datenbankt mach sich bereits bezahlt, wir beziehen uns nur
auf die bereits vorhandene Tabelle.

26

Einführung in Base

Abbildung 13: Sortierung eines Formulars

Mehrstufige Formulare
Weitergehende Möglichkeiten als mit den Formularen, die auf einer Tabelle basieren, haben Sie
mit Formularen, die mehrere Tabellen miteinander verknüpfen. Wir werden das zunächst anhand
der Tabellen für Komponist und Werk, die in „Beschreibung des Beispiels“ auf Seite 9 genannt wurden, demonstrieren. Dazu werden wir neben den beiden Tabellen auch die Beziehung zwischen
ihnen in der Datenbank anlegen, was gegenüber der auch möglichen Festlegung der Beziehung
bloß im Formular den enormen Vorteil hat, dass diese Beziehung bei allen Datenbankaktionen, diediese Tabellen betreffen, berücksichtigt wird. Beim Einsatz einer externen Datenbank werden Sie
diese Beziehung bevorzugt im Datenbanksystem selbst ablegen.
Den weiteren Schritt, die Werke mit den Medien in Beziehung zu setzen, damit wir sehen, welches
Werk wir auf welchen Medien finden, werden wir später in „Erweiterung des Formular-Dokuments
auf weitere Ebenen“ auf Seite 34 durchführen.

Tabellen für Komponist und Werk
Wir legen auch hier nur die wichtigsten Felder an. Wie eine Tabelle angelegt wird, wurde in„Tabelle erstellen“ auf Seite 16 beschrieben. Deshalb beschreiben wir hier nur kurz die Felder, Siesehen die Feldnamen dann sowieso in „Relationen“ auf Seite 28.
Die Tabelle „Komponist“ erhält einen Primärschlüssel „KompId“, wieder als Integer-Variable mit
Auto-Wert, und drei Felder vom Typ VARCHAR für Nachname, Vorname und Lebensdaten. Beim
Nachnamen legen wir fest, dass die Eingabe erforderlich ist.
Die Tabelle „Werk“ legen wir mit WerkId – ebenso Integer als Auto-Wert – und den Datenfeldern
Werktitel (Eingabe erforderlich), Werknummer und Anmerkung an, alle als VARCHAR. Der Begriff
Werknummer hat sich eingebürgert, aber nicht alle Werkverzeichnisse verwenden reine Nummern;
daher verwenden wir auch für dieses Feld ein Textformat.
Mehrstufige Formulare

27

Ein weiteres Feld fügen wir noch hinzu: wie in „Beschreibung des Beispiels“ auf Seite 9 schon
angedeutet, haben wir eine Beziehung zwischen der Tabelle „Komponist“ und der Tabelle „Werk“:
jedes Werk ist einem Komponisten zugeordnet. Daher fügen wir der Tabelle „Werk“ noch das Feld
KompId (als INTEGER) hinzu, in das die KompId aus der Tabelle „Komponist“ eingetragen wird,
damit das Werk diesem Komponisten zugeordnet ist. Und wir verlangen, dass die Eingabe in diesem Feld erforderlich ist. Dies ist nicht ganz selbstverständlich, denn es gibt Werke, die anonymüberliefert sind. Wenn wir aber erlauben würden, dass ein Werk ohne Bezug zu einem Komponisten in die Datenbank aufgenommen werden kann, müssten wir für die Anzeige dieser Werke einen
anderen Weg als für die Anzeige der restlichen Werke einrichten, praktischer erscheint daher hierdie Einführung eines fiktiven Komponisten „anonym“ (oder auch bei Bedarf mehrerer, um größere
Sammlungen getrennt zu behandeln). Diese Entscheidung hängt aber wirklich von den Inhalten
der Datenbank ab, in einer anderen Situation kann es durchaus sein, dass die andere Alternative
sinnvoll ist. Hier dient die Entscheidung auch dazu, die Beispiel-Anwendung möglichst knapp zu
halten.

Relationen
Die Beziehung zwischen den Tabellen „Komponist“ und „Werk“, die wir soeben beschrieben haben,
ist eine sogenannte 1:n-Beziehung: zu einem Komponisten gehören möglicherweise mehrere Werke, was einschließt, dass auch mal noch gar kein Werk zu diesem Komponisten in der Datenbank
vorhanden ist (das passiert z.B. immer, wenn wir einen neuen Komponisten anlegen). Andererseits
wird auch erst durch die zusätzliche Festlegung, dass für die KompId eine Eingabe erforderlich ist,garantiert, dass zu jedem Werk ein Komponist in der Datenbank erfasst ist. Exakt müsste dieseBeziehung also mit „0 oder 1 zu 0 bis n“ bezeichnet werden.
Einen weiteren Typ, die n:m-Beziehung, werden wir in „n:m-Beziehung“ auf Seite 34 vorstellen, die
1:1-Beziehung werden wir in diesem Kapitel nicht behandeln. Weitere Informationen finden Sie im
Base-Handbuch.
Im Umfeld von relationalen Datenbanksystemen verwendet man – entsprechend dem Namen desDatenbanksystems – im Deutschen statt „Beziehung“ den Begriff „Relation“. Wir wissen inhaltlich,dass die genannte Beziehung zwischen den beiden Tabellen bestehen soll, technisch weiß das
Datenbanksystem noch nichts davon. Die Tatsache, dass in beiden Fällen ein Feld gleichen Namens auftaucht, nämlich KompId, hat nichts zu besagen, gleiche Namen kann es häufiger geben(z.B. das Feld „Name“), zu Recht ignoriert die relationale Datenbank die Gleichnamigkeit und verlangt, dass die Beziehung explizit mit Hilfe einer Relation im Datenbanksystem definiert wird.
Wie schon der Name „relationales Datenbanksystem“ vermuten lässt, spielen die Relationen dort
eine eminente Rolle, denn sie garantieren, dass der Datenzusammenhang gewährleistet ist. Wir
können hier nicht im Detail darauf eingehen, Sie finden darüber mehr in der Literatur zu relationalen Datenbanken, aber schon die knappe Beschreibung im ersten Absatz dieses Abschnitts zeigt
sicher die grundsätzliche Bedeutung; und durch die Hinterlegung in der Datenbank selbst wird
garantiert, dass diese Bedingungen vollständig und konsistent beachtet werden.
Um also die Relation zwischen Komponist und Werk in unserer Datenbank zu definieren, wählen
Sie im Startfenster des Datenbank-Dokuments Extras → Beziehungen… Es öffnet sich ein neues
Fenster zur Festlegung der Relationen und zusätzlich ein Dialog, in dem die vorhandenen Tabellen
zur Auswahl angeboten werden. In unserem Fall wählen wir durch Doppelklick oder Selektion undAuswählen aus den vorhandenen Tabellen „Komponist“ und „Werk“ aus, die dann jeweils im
Fenster eingefügt werden (Abbildung 14).

28

Einführung in Base

Abbildung 14: Relationen-Entwurf
Die Rechtecke, die die Tabellen symbolisieren – und die Sie übrigens verschieben und in ihrer
Größe ändern können – , zeigen alle Spalten der jeweiligen Tabelle an und auch, welches derPrimärschlüssel ist.
Sie können nun, wenn Sie wollen, den Dialog zur Auswahl der Tabellen schließen, Sie können ihn
bei Bedarf über Einfügen → Tabellen hinzufügen wieder aufrufen.
Klicken Sie nun in der Tabelle „Werk“ das Feld „KompId“ an und ziehen Sie bei gedrückter linker
Maustaste den Mauszeiger auf das Feld „KompId“ der Tabelle „Komponist“; dort lassen Sie die
Maustaste los. Zwischen den beiden Tabellen wird nun eine Relation angezeigt, Sie können an derBeschriftung erkennen, dass es eine 1:n-Relation ist (Abbildung 15).

Abbildung 15: 1:n-Relation

Tipp

Ohne Maus können Sie über Einfügen → Neue Relation einen Dialog aufrufen, in
dem Sie die die Relation definieren können.

Die Relation hat einige Eigenschaften, die Sie durch Doppelklick auf die Verbindungslinie oder
Kontextmenü → Bearbeiten… anzeigen können, auf die wir hier nicht detailliert eingehen,sondern auf das Base-Handbuch verweisen. Wir halten nur fest, dass die beim Erzeugen der
Relation automatisch gesetzten Standardeinstellungen bedeuten, dass Sie den Komponisten nichtlöschen und das Feld „KompId“ nicht ändern können, wenn noch ein Werk mit ihm verknüpft ist.
Das letztere wollen wir sowieso nicht, da es sich um ein automatisch nummeriertes Feld handelt,
Mehrstufige Formulare29und das erste ist eine sinnvolle Sicherheitsmaßnahme, damit keine Werke ohne Verknüpfung mit
einem Komponisten in der Datenbank übrigbleiben. Mit diesen Standardeinstellungen sind Sie auf
der sicheren Seite, andere Einstellungen sollten Sie erst vornehmen, wenn Sie etwas mehr
Erfahrung mit relationalen Datenbanken gewonnen haben.

Erzeugen des Formulars mit dem Assistenten
Nun erstellen wir ein Formular für die beiden soeben erstellten Tabellen. Die soeben definierte
Relation wird dabei nun als mögliche Verknüpfung angeboten, die wir natürlich verwenden.
Es sei hier nochmals darauf hingewiesen, dass das Erstellen eines Formular-Dokuments mit Hilfedes Assistenten meistens der schnellste und einfachste Weg ist; dies gilt insbesondere für Formulare, die ein Tabellen-Steuerelement enthalten. In der Entwurfsansicht passt man dann das Ganze
nur noch an oder erweitert es, wenn die Anforderung über die Möglichkeiten des Assistenten
hinausgeht.
1. Wählen Sie „Formular unter Verwendung des Assistenten erstellen“.
2. Wählen Sie die Tabelle „Komponist“ und davon die Felder Nachname, Vorname undLebensdaten; KompId lassen wir nun weg, da es nur ein internes Feld ist, das den
Anwender nicht interessieren muss.
Wählen Sie Weiter.
3. Aktivieren Sie nun das Markierfeld „Unterformular hinzufügen“.
4. Wählen Sie dann die Option „Unterformular basiert auf bestehender Beziehung“.
5. Dann können Sie aus den angebotenen Relationen die gewünschte wählen; in unserem
Fall steht uns ohnehin als einzige „Werk“ zur Verfügung. (Genaugenommen bietet Ihnen
der Assistent nicht Beziehungen an, sondern die Zieltabellen der 1:n-Beziehungen, die vonder zuerst gewählten Tabelle ausgehen.)
6. Wählen Sie nun die Felder – Werktitel, Werknummer, Anmerkung – der nun angebotenen
Tabelle „Werk“ aus und betätigen Sie Weiter.
7. Wir möchten die Daten beider Datenbank-Tabellen in tabellarischer Form darstellen, wasschon der Vorschlag des Assistenten ist, daher können wir direkt Weiter auslösen.
8. Auch die folgenden beiden Schritte bestätigen wir mit Weiter, wir kennen das bereits aus„Erzeugen des Formulars mit dem Assistenten“ auf Seite 19.
9. Wir vergeben noch den Namen „Aufnahmenverwaltung“ und betätigen Fertigstellen. Der
Name des Formulars ist im Vorgriff auf das gewählt, was wir mit ihm noch weiter vorhaben.

HinweisSie können auch ohne eine im Datenbanksystem hinterlegte Relation die Formulare
miteinander verknüpfen. Wählen Sie dazu in Schritt 5 auf Seite 30 „Beziehungenwerden manuell ausgewählt“ und geben Sie im folgenden Schritt die Felder zur Verknüpfung an. Diese Art der Verknüpfung ist allerdings dann nur in diesem Formulardefiniert, durch die Definition der Relation in der Datenbank dagegen gilt sie allgemein, was natürlich die Integrität der Datenbank verbessert.

Mit dem zweistufigen Formular arbeiten
Nachdem der Standardvorschlag im letzten Schritt das Öffnen des Formulars zum Arbeiten mit den
Daten war, sehen wir nun das erzeugte Formular.
Die Datenbank-Tabellen, die wir ja erst in „Tabellen für Komponist und Werk“ auf Seite 27 angelegt
haben, sind ja noch leer, daher wird im Formular-Dokument auch nichts angezeigt. Sie können nun
in der oberen Tabelle beispielsweise Bach, Johann Sebastian, 1685 – 1750 eingeben. Wenn Sie
nun das Speichern auslösen – am besten durch das entsprechende Symbol in der Symbolleiste
30

Einführung in Base

Datenbanknavigation, denn wenn Sie anderswohin klicken, müssen Sie anschließend für die
Erfassung eines Werks erst wieder in die Zeile zurückkehren – dann erscheint in der unteren
Tabelle das Zeichen für die Eingabezeile, und Sie können ein Werk erfassen, das aufgrund derDefinitionen, die wir gerade bei der Erzeugung des Formular-Dokuments getroffen haben, demoben markierten Komponisten zugeordnet wird (indem beim Speichern des Werks in der Datenbank automatisch die KompId der übergeordneten Tabelle eingetragen wird).
Abbildung 16 zeigt die Situation nach dem Speichern des Satzes für das Werk. Die Tabellen undder Platz zwischen ihnen wurden aus Platzgründen im Screenshot verkleinert. Wenn das Formularzur Datenanzeige und -verwaltung geöffnet ist, kann man die Größe und Lage der Tabellen nichtändern. Sie müssen das im Entwurfsmodus vornehmen. Auch die Spaltenbreite kann dauerhaft nur
im Entwurfsmodus verändert werden, temporär können Sie sie allerdings auch im Anzeigemodusändern, indem Sie mit der Maus die Trennlinie zwischen den Spalten verschieben; das haben wir
für den Vornamen und den Werktitel getan, damit er voll lesbar ist.
Wir werden uns nicht um eine optische Optimierung der Gestaltung des Formulars bemühen, dadas dazu nötige Vorgehen auf der Hand liegt, aber anderseits viel Detailarbeit ohne wesentliche
Erkenntnis bedeutet, wir beschäftigen uns also mehr mit den technischen Fragen.

Abbildung 16: Formular "Aufnahmenverwaltung", Dateneingabe

Abfragen
Wir werden im Weiteren nun Abfragen benötigen, die die Zugriffsmöglichkeiten auf die Datenerweitern.

Was sind Abfragen
In einer Datenbank werden die Daten nach Gesichtspunkten von Eindeutigkeit, Konsistenz, Effizienz, Speicherplatz usw. abgelegt. Man muss jedoch häufig auch in anderen Sichtweisen auf die
Daten – vor allem lesend – zugreifen. Diesen Bedarf decken in Base Abfragen ab. Abfragen sindBeschreibungen, wie aus einer oder mehreren Tabellen der Datenbank eine neue „Tabelle“ zuerzeugen ist. Dabei können aus den einzelnen Quellen nur gewisse Spalten und/oder Zeilen ausgewählt werden, sie können weiter definieren, wie die eingehenden Tabellen verknüpft werdensollen – häufig verwendet man die gleichen Bedingungen, wie sie durch die Relationen definiertsind – , und Sie können auch aus den Daten durch Summieren und andere Funktionen verdichtete
Sätze erzeugen. Das Ergebnis hat jedenfalls immer wieder die Struktur einer Tabelle, wie sie die
Datenbanktabellen haben, kann also genauso weiterverarbeitet werden. Der große Unterschied ist,
dass Abfragen häufig nicht zur Verwaltung der Daten fähig sind. Das liegt an grundsätzlichen, nicht
auflösbaren Konflikten, die sich ergeben würden, wenn in einer Umgebung mit mehreren Benutzern die Daten mehrerer Abfragen, die jeweils mehrere Tabellen verknüpfen, sicher, eindeutig und
Abfragen31

konsistent verändert werden sollen. Auf viele Abfragen kann daher nur lesend zugegriffen werden,
aber der lesende Zugriff ist auch das Haupteinsatzgebiet von Abfragen, die Verwendung von Abfragen zur Verwaltung ist ein mengenmäßig kleiner, aber dennoch wichtiger Teilbereich.

HinweisWer schon Ahnung von relationalen Datenbanken hat, wird erkennen, dass das im
Grunde das ist, was Sichten (Views) im Datenbanksystem leisten. Tatsächlichwerden beide mit der gleichen Syntax definiert, strukturell sind sie identisch (derSQL-Code ist der gleiche, auch der Assistent sieht genauso aus.). Der Unterschiedbesteht darin, dass Datenbank-Sichten vom Datenbanksystem genauso präsentiert
werden wie Datenbank-Tabellen, ohne dass das aufrufende Programm weiß, wasder Inhalt der Sicht ist (ob also z.B. eine Verwaltung möglich ist, zeigt sich erst,
wenn man den Versuch macht), während Abfragen in Base definiert sind und Basedaher eventuell auf den Inhalt eingehen kann. Dafür kann eine Abfrage sich nicht auf
eine andere Abfrage beziehen, während dies bei Sichten möglich ist. Dies kann sehrökonomisch sein: man kann eine Handvoll sehr komplexer Sichten definieren, dieaufwendige Datenverarbeitungen beinhalten, und darauf aufbauend Dutzende voneinfachen Sichten (oder auch bei Verwendung von Base Abfragen), die alle von derbereits definierten Logik profitieren.
In diesem Kapitel verwenden wir nur recht einfache Abfragen, die meist auch genauso gut als Sichten definiert sein könnten.
Verwenden auch Sie zu Beginn lieber Abfragen, erst in komplizierten Fällen könnten
Sichten einen Vorteil bieten. (der geringfügig höhere Verarbeitungsaufwand vonAbfragen, die erst an das Datenbanksystem übermittelt werden müssen, während es
Sichten schon kennt, ist meist zu vernachlässigen.)Abfragen erstellen
Zur Erstellung einer Abfrage werden drei Möglichkeiten angeboten, wenn Sie den Aufgabenbereich„Abfragen“ wählen:
1. Abfrage in der Entwurfsansicht erstellen: diesen Weg werden wir im Folgenden beschreiten, weil er mehrere Tabellen mitsamt ihren Verknüpfungen kombinieren lässt. Der Verlust
an Komfort gegenüber dem Assistenten ist unerheblich gegenüber dem Gewinn an
Möglichkeiten.
2. Abfrage unter Verwendung des Assistenten erstellen: dieser Weg kann vor allem genutzt
werden, die Auswahl der Zeilen einer Tabelle durch Bedingungen einzuschränken und
eventuell nur einige Spalten auszuwählen. Das ist eine nützliche Funktion, allerdings eher,um Basis-Abfragen zu definieren, die dann in weiteren Abfragen verwendet werden, oderwenn Sie die so definierten Daten direkt in der Abfrage-Anzeige ansehen wollen.
Wenn Sie Spalten aus mehreren Tabellen auswählen, werden die Relationen weder
automatisch berücksichtigt noch haben Sie die Möglichkeit, innerhalb des Assistenten selber die Verknüpfung der Tabellen einzugeben; Sie müssen dann also sowieso noch die
Entwurfsansicht öffnen.
3. Abfrage in SQL-Ansicht erstellen: der Weg für die Profis, wenn sie etwas spezielles gleich
von Anfang an wollen; ansonsten fahren auch sie meist besser mit Punkt 1 und anschließender Detailkorrektur.

Zwei Abfragen für Listenfelder
Wir werden in „Hinzufügen von Elementen zu einem Formular“ auf Seite 37 Listenfelder einsetzen,
die auf einer bestehenden Tabelle basieren, die allerdings nicht die für die Listenfelder benötigte
Struktur (s. „Ein Listenfeld für den Medientyp“ auf Seite 23) hat. Mittels Abfragen können wir aberleicht eine entsprechende „Tabelle“ definieren.
Wir benötigen dafür zunächst ausgehend von der MedienID den Medientyp und den Titel.
32

Einführung in Base

Wählen Sie dazu Abfrage in der Entwurfsansicht erstellen. Darauf erscheint ein neues Fenster„Abfrageentwurf“ im Hintergrund und im Vordergrund ein Dialog, in dem Sie die in der Abfrage zu
verwendenden Tabellen auswählen können. Wählen Sie hier Medium. Den Dialog können Siedann, wenn Sie wollen, schließen. Wählen Sie dann als erste Spalte „MedienTitel“ und als zweite„MedienId“ und als Namen „A_MedienTitel“. In der Spalte für den Medientitel wählen wir für die
Sortierung „aufsteigend“ (Abbildung 17, links).

Abbildung 17: Die Abfragen "A_MedienTitel" und "A_MedienTyp"Für die zweite Abfrage benötigen wir etwas mehr Aufwand: da wir nicht bloß den in der Tabelle
Medium gespeicherten intern verwendeten zweistelligen Medientyp, sondern seine externe
Darstellung als evtl. deutlich längeren Text sehen wollen, müssen wir zu Medium die Tabelle
MedienTyp hinzufügen (wenn der Dialog zur Tabellenauswahl nicht mehr offen ist, wählen Sie
Einfügen → Tabelle oder Abfrage hinzufügen) und als erste Spalte der Abfrage das Feld
„MedienTyp“ aus der Tabelle MedienTyp und als zweites wie zuvor die Spalte „MedienId“ aus derTabelle Medium wählen, den Medientyp sortieren wir aufsteigend. Als Namen vergeben wir„A_MedienTyp“ (Abbildung 17, rechts).
Es lohnt sich, in diesem Stadium einmal den Menüpunkt Ansicht → Designmodus umschaltenoder das entsprechende Symbol zu betätigen. Sie sehen dann die Abfrage, wie Sie gespeichert ist:
SELECT "MedienTyp"."medienTyp", "Medium"."MedienId" FROM "Medium", "MedienTyp"
WHERE "Medium"."MedienTyp" = "MedienTyp"."medienTypId" ORDER BY"MedienTyp"."medienTyp" ASCEs handelt sich um Code in der Sprache SQL, in der alle Datenbankdefinitionen u.ä. intern abgelegt werden (und die für alle relationalen Datenbanksysteme verwendet wird). Der abgebildete
Befehl ist, wenn Sie ihn mit Abbildung 17 rechts vergleichen, sehr leicht verständlich: zunächst
werden die Spalten aufgezählt, die die Abfrage enthält, immer mit vorangestelltem Tabellennamen,
damit bei Namensgleichheit keine Unklarheit entsteht (wenn Sie das selbst eingeben, können Sie
den Tabellennamen weglassen, wenn Sie sehen, dass die Eindeutigkeit gegeben ist, aber derAssistent macht das einfach immer); dann werden die Tabellen benannt, aus denen die Spalten
stammen; und schließlich – ganz wichtig – werden die beiden Tabellen über die in beiden identischgefüllte Spalte „MedienId“ bzw. „medienTypId“ verknüpft, so dass nur zusammengehörige Sätze
aus beiden Tabellen kombiniert werden. Diese Verknüpfung hat Base aufgrund der in derDatenbank definierten Relation eingefügt, ein weiteres Argument für die Hinterlegung vonRelationen. Als letztes folgt die Sortierung.

Abfragen33

Hinweis

Dass die Tabellen- und Spaltennamen im Gegensatz zur üblichen Schreibweise von
SQL in Anführungszeichen eingeschlossen werden müssen, liegt an einer Eigenheitder HSQLDB, die in LibreOffice übernommen wurde.

Anstatt einer Abfrage können Sie übrigens immer direkt den SQL-Befehl angeben, das ist inmanchen Fällen bequemer als die Definition einer neuen Abfrage.

Sortierung
Durch Einträge in der vierten Zeile „Sortierung“ können Sie veranlassen, dass die Daten anhand
der gewählten Spalten sortiert werden. Oft ist es praktischer, in der Abfrage noch keine Sortierung
anzugeben, sondern erst im Formular oder Bericht; Sie können dann insbesondere die gleiche
Abfrage eventuell mehrmals mit unterschiedlicher Sortierung einsetzen. Die beiden soeben
definierten Abfragen werden jedoch für Listenfelder benötigt, bei denen keine direkte Angabe derSortierung mehr möglich ist, daher muss die Angabe in der Abfrage erfolgen.
Die Definition der gewünschten Sortierung kann in der Entwurfsansicht der Abfrage auch eventuelletwas umständlich sein. Die Sortierspalten werden nämlich in der Reihenfolge von links nach
rechts verwendet; wenn Sie eine andere Reihenfolge benötigen, können Sie die Reihenfolge leicht
in der SQL-Ansicht ändern (wenn die notwendigen Befehlsteile bereits dastehen, können Sie sie
leicht vertauschen, ohne viel von SQL zu verstehen). In der Entwurfsansicht müssen Sie die
betreffenden Spalten ein zweites Mal weiter rechts einfügen und dort erst die Sortierung angeben,so dass die gewünschte Reihenfolge erreicht wird (das doppelte Vorkommen der Spalte dient nur
der Darstellung). Weitere Möglichkeiten finden Sie im Base-Handbuch im Kapitel „Abfragen“.

Abfrage für AuswertungenEine weitere Abfrage für Berichte werden wir in „Eine Abfrage für Berichte“ auf Seite 43 erstellen.

Erweiterung des Formular-Dokuments auf weitere Ebenen
Nun wollen wir das in „Erzeugen des Formulars mit dem Assistenten“ auf Seite 30 erstellte Formular-Dokument erweitern, damit wir zu einem Werk anzeigen können, auf welchen Medien es enthalten ist. Der Weg dazu führt über die MedienId, die das Medium eindeutig identifiziert, anzeigen
wollen wir allerdings Daten des Mediums bzw, sogar den daraus abgeleiteten Klartext des Medientyps. Wir müssen dazu (wie schon in „Bearbeiten des Formulars“ auf Seite 22) das FormularDokument im Bearbeitungsmodus aufrufen, um die weiteren Schritte durchzuführen, da derAssistent nur eine Unterformularebene behandeln kann, was wir schon durch die Werk-Ebene
ausgenutzt haben. Zunächst müssen wir uns jedoch mit der Beziehung zwischen Werk und
Medium befassen, dies ist nämlich ein neuer Typ, die n:m-Beziehung.

n:m-Beziehung
Diese Form der Verknüpfung wurde bereits in „Relationen“ auf Seite 28 erwähnt, aber nicht
genauer beschrieben. Sie erlaubt, einen Satz aus einer Tabelle jeweils mit mehreren aus deranderen Tabelle zu verknüpfen. Das ist genau das, was wir für die Verknüpfung von Werk und
Medium benötigen: Ein Werk kann auf mehreren Medien enthalten sein, und ein Medium enthält
meist mehr als ein Werk. Natürlich können dabei auch „offene Enden“ vorkommen: ein Werk ist(noch) keinem Medium zugeordnet oder ein Medium ist (noch) mit keinem Werk verknüpft.
Dies lässt sich nun nicht mehr einfach durch Eintrag eines Verweises in der Tabelle erledigen,denn wir bräuchten dafür ja eine unbestimmte Anzahl von Verweisen, die sich im Lauf der Zeit
auch ändern könnte, was sich nicht mit der Grundkonzeption einer relationalen Tabelle mit festen
Spalten verträgt. Man definiert stattdessen eine neue Tabelle, die die Verknüpfungen der beiden
anderen Tabellen enthält. In unserem Beispiel sieht das konkret so aus, dass wir eine Tabelle
34

Einführung in Basedefinieren, die die die zwei Spalten WerkId und MedienId enthält (natürlich als INTEGER, genau
wie die Spalten aus den beiden Tabellen, auf die sie sich beziehen). Jede Zeile in dieser neuen
Tabelle beschreibt somit eine einzelne Beziehung zwischen den Tabellen „Werk“ und „Medium“.
Vom Werk aus gesehen findet man so alle Medien, die mit diesem verknüpft sind, und umgekehrt.
Diese Tabelle könnte durchaus weitere Spalten enthalten, in unserem Fall z. B. eine Spalte, in der
man eine Beurteilung der Aufnahme hinterlegt (die dann vielleicht in einem aufklappbaren, mehrzeiligen Feld angezeigt würde, s. dazu das Base-Handbuch).
Wie in „Primärschlüssel“ auf Seite 15 gesagt, benötigt unsere Tabelle einen Primärschlüssel. Diesmal verwenden wir allerdings nicht einen künstlichen, automatisch vergebenen Schlüssel, sondern
die Kombination der beiden Tabellenspalten. Denn diese ist ja schon eindeutig, wir wollen ja ein
Werk nicht zweimal mit dem gleichen Medium verknüpfen, und durch die Definition als Primärschlüssel ist sogar sichergestellt, dass auch nicht versehentlich die gleiche Kombination ein
zweites Mal in die Datenbank aufgenommen werden kann.
Gerade bei dieser Tabelle sieht man deutlich, dass es sinnvoll ist, die Beziehung zu den Tabellen„Werk“ und „Medium“ wie in „Relationen“ auf Seite 28 beschrieben in der Datenbank zu hinterlegen, denn nur dadurch wird die sogenannte „referentielle Integrität“ gewährleistet, die wir bei
dieser für unsere Datenstruktur wichtigen Tabelle benötigen: Der Primärschlüssel gewährleistet
zwar, dass keine doppelten Beziehungen aufgenommen werden, doch erst die Relationen, die wir
gleich anlegen werden, gewährleisten, dass die aufgenommenen Beziehungen auch zu
existierenden Objekten in der Datenbank gehören und dass, wenn wir die Standardeinstellungennicht bewusst ändern, auch keine Objekte gelöscht werden können, solange Beziehungen zu
anderen Objekten bestehen. Selbst Formulare können nur in manchen Fällen – wie im gerade
erstellten zwischen Komponist und Werk – die referentielle Integrität gewährleisten, in anderen
Fällen nicht, wie wir bei der Erweiterung unseres Formulars sehen werden. Und bei Verwaltungender Datenbank direkt auf den Tabellen, ob direkt oder per Programm, bietet nur die Definition der
Relationen in der Datenbank die gewünschte Sicherheit.
Wir fügen daher (s. Abbildung 18) die beiden Relationen hinzu, und außerdem ergänzen wir, nachdem wir nun die Bedeutung der Relationen kennen, die Relation zwischen den Tabellen Medium
und MedienTyp (s. „Ein Listenfeld für den Medientyp“ auf Seite 23), die wir dort noch nicht angelegt
haben, weil wir uns dort noch nicht mit den Relationen befasst haben:

Abbildung 18: n:m-Beziehung Werk_Medien und nachgeholte Beziehung zum Medientyp
Sie sehen in der Abbildung übrigens auch das Schlüsselsymbol für den Primärschlüssel vor beiden
Spalten in der Tabelle „Werk_Medien“.

Erweiterung des Formular-Dokuments auf weitere Ebenen

35Hinweis

Eine Festlegung, dass WerkId und MedienId eingegeben werden müssen, ist hiernicht erforderlich und wird deshalb auch nicht angeboten, denn bei PrimärschlüsselSpalten setzt das Datenbanksystem das voraus.

Der Formularnavigator
HinweisFür die Bearbeitung eines Formular-Dokuments benötigen Sie meist die Symbolleisten Formularentwurf, -Navigation und -Steuerelemente. Aktiveren Sie sie ggf. überAnsicht → Symbolleisten.

Für die weitere Gestaltung des Formular-Dokuments verwenden wir nun den Formular-Navigator,
der uns auch sonst hilft, uns in einem umfangreichen Formular-Dokument zurechtzufinden(Abbildung 19). Sie rufen den Formular-Navigator durch sein Symbol
in der Symbolleiste
Formular-Entwurf auf.

Abbildung 19: Der Formular-Navigator
Er zeigt die Elemente des Formular-Dokuments in einer hierarchischen Struktur wie bei einem
Datei-Explorer. Bei größeren Formular-Dokumenten kann diese Darstellung sehr hilfreich sein, um
Zugehörigkeiten zu klären.

Tipp

Klappen Sie ggf. den Baum durch Anklicken des Plus-Zeichens vor einem Eintragauf.

Die oberste Ebene Formulare ist auch bei einem leeren Formular-Dokument bereits vorhanden.,sobald Sie den Navigator öffnen. Darunter ist das Hauptformular (MainForm, durch den Assistenten so genannt) angeordnet, das wiederum das Tabellengitter (MainForm_Grid) für die Komponisten enthält. Das Formular enthält nun, wie Sie über das Kontextmenü sehen können, den Bezug
auf die Daten der Tabelle (oder Abfrage, Ansicht), das Steuerelement wie hier das Tabellengitter
kümmert sich um deren Darstellung.
Das Hauptformular enthält weiterhin das Unterformular (SubForm), das wiederum das zweite
Tabellengitter enthält. Die Namen der Formulare und Tabellen sind hier die von LibreOfficevergebenen, die Sie ändern können und oft auch sollten.
Wir möchten nun eine weitere Datenebene einfügen, nämlich die Zuordnung der Werke zu einem
Medium. Wir benötigen dazu zunächst ein weiteres Formular, da darin der Bezug zu den Daten in
der Datenbank hergestellt wird. Das neue Formular muss dann natürlich dem Formular SubForm,das die Werke enthält, untergeordnet werden. Markieren Sie dazu im Formular-Navigator
SubForm und wählen Sie Kontextmenü → Neu → Formular. Als Ergebnis zeigt der FormularNavigator einen neuen Eintrag mit Namen „Formular“. Wählen Sie – der Eintrag ist ja markiert –Kontextmenü → Eigenschaften, ändern Sie den Namen auf beispielsweise „Aufnahmen“ undsetzen Sie vor allem im Reiter Daten die Art des Inhalts ggf. auf „Tabelle“ und den Inhalt auf„Werk_Medien“ und setzen Sie mithilfe der Schaltflächen mit den drei Punkten bei „Verknüpfen
von“ oder „Verknüpfen nach...“ die Verknüpfung von WerkId bei Werk_Medien zu WerkId bei Werk;
36

Einführung in Basedamit wird die Verknüpfungstabelle Werk_Medien als in diesem Formular der Tabelle Werk
untergeordnete Tabelle definiert.
Nun können wir für das neu definierte Formular „Aufnahmen“ wählen, wie wir die Daten darstellenmöchten, als einzelne Sätze, die wir durchblättern müssen, oder – unsere Wahl – als Tabelle, die,abgesehen von notwendigem Rollen, alle Aufnahmen zu einem Werk zeigt.

Hinzufügen von Elementen zu einem Formular
Das Formular „Aufnahmen“ sollte nach dem Gesagten im Formular-Navigator markiert sein, wenn
nicht, dann markieren Sie es, denn nur dadurch wird das im nächsten Schritt definierte TabellenSteuerelement diesem Formular zugeordnet. Die Symbolleiste Formular-Steuerelemente zeigt nun
einige Basis-Elemente, aber nicht das gewünschte Tabellen-Element. Das erreichen Sie erst überden Eintrag(„Weitere Steuerelemente“), der eine weitere Symbolleiste öffnet. Wählen Siedann das Tabellensymbol aus, dann ziehen Sie an der Stelle, wo die Tabelle eingefügt werden soll,mit der Maus ein Rechteck auf; es erscheint ein Assistent (Abbildung 20), in dem Sie die Felder
der Tabelle (oder Abfrage), die ja durch den Eintrag im Formular bereits festgelegt ist, auswählen
können, die im Tabellenelement angezeigt werden sollen.

Abbildung 20: Der Tabellenelement-Assistent

Tipp

Das Fenster des Formular-Dokuments wurde vom Assistenten auf eine Größe eingestellt, die nicht sehr viel größer ist als der Platz, den die vorhandenen Steuerelemente benötigen. Je nach Größe Ihres Bildschirms können Sie das Fenster nicht
mehr vergrößern. Dann können Sie einfach den Maßstab verkleinern, z.B. statt
100% 75% wählen, dann haben Sie Platz für weitere Steuerelemente. Wenn Sieanschließend wieder auf 100% umschalten, hat das Fenster einen Rollbalken.

Im Assistenten wählen wir nur die MedienId, die WerkId würde, wenn wir diese interne Spalteüberhaupt sehen wollten, schon passender in der Tabelle der Werke angezeigt.
Mit der MedienId selbst können wir nun auch nicht viel anfangen, das ist ja nur eine automatischvergebene Nummer, aber wir haben bereits in „Erweiterung des Formular-Dokuments auf weitere
Ebenen“ auf Seite 34 beschrieben, dass wir auf davon abhängige Datenfelder zugreifen wollen,
und in „Zwei Abfragen für Listenfelder“ auf Seite 32 die Abfragen definiert, die wir für diesen Zweck
benötigen.

•Wählen Sie nun für den Spaltenkopf „MedienId“ unseres neu erzeugten Tabellenelements
das Kontextmenü und dort Ersetzen durch → Listenfeld. Dann wählen Sie das
Kontextmenü und Spalte... → Daten und setzen im Feld Art des Listeninhalts „Abfrage“

Erweiterung des Formular-Dokuments auf weitere Ebenen

37und im Feld Listeninhalt den Eintrag „A_MedienTyp“ aus der Auswahlliste. Im Reiter
Allgemein setzen Sie noch den Titel „Typ“, denn das Feld zeigt ja nun entsprechend dergewählten Abfrage den Medientyp an.

•

Zeigen Sie weiter mit der Maus auf den Spaltenkopf „MedienId“ oder rechts davon undwählen Sie Kontextmenü → Spalte einfügen → Listenfeld. Die neue Spalte wir nun mit
einem vom Programm vergebenen Titel angezeigt. Wählen Sie wieder Kontextmenü →Spalte… und vergeben Sie den Titel „Titel“, setzen Sie wieder Abfrage mit dem Inhalt„A_MedienTitel“, und – weil wir ja diese Spalte ohne den Assistenten angelegt haben –wählen Sie im Feld Datenfeld den Eintrag „MedienId“. Das ist der gleiche Eintrag wie in derersten Spalte, aber durch die andere Abfrage wird ein anderer Inhalt angezeigt!

Wenn Sie nun das Formular-Dokument (zur Anzeige und Verwaltung der Daten) öffnen, sehen Sie,dass im dritten Tabellenelement statt des Datenbankfelds MedienId Medientyp und Medientitel im
Klartext aus der Tabelle Medium angezeigt werden. Abbildung 21 zeigt das in einer optisch schon
etwas verbesserten Form. Wenn Sie in eine Zelle einer dieser beiden Spalten klicken, erscheint
das Symbol mit dem auf die Spitze gestellten Dreieck, mit dem Sie die jeweilige Liste aufklappen
können.
Nicht auf den ersten Blick ist nun ersichtlich, dass diese Konstruktion zwar wunderbar den Klartext
des Medientyps und den Medientitel anzeigt, beides ausgehend von MedienId, dass sich aber ein
Konflikt zeigt, sobald man Daten eingeben will: es ist möglich, beim Medientyp einen anderen Eintrag zu wählen, als das Medium besitzt, das man über den Titel wählt. Da sich in einem solchen
Fall beim Speichern, wo ja in beiden Fällen die MedienId zugrunde liegt, ein Widerspruch ergeben
würde, wird das Speichern folglich vom Datenbanksystem verhindert werden, was Sie gern einmal
ausprobieren können.
Es gibt nun mehrere Wege, diesem Problem aus dem Weg zu gehen. Einer besteht darin, beide
Informationen in einem einzelnen Feld zu zeigen, dazu benötigen Sie jedoch eine – recht einfache– Funktion von SQL, das wir in dieser Einführung nicht verwenden wollen. Eine andere einfache
Lösung ist, das Feld für den Medientyp für die Verwaltung zu sperren, denn wir wählen ja das Medium ohnehin über den Titel. Hierzu verwendet man nun nicht, wie vielleicht zu erwarten, – wiederüber Kontextmenü → Spalte… zu erreichen – das Feld „Nur lesen“, denn ein Listenfeld ist
sowieso nicht änderbar, sondern das Feld „Aktiviert“, das bestimmt, ob ein Feld über Maus oder
Tastatur erreichbar und damit auch verwaltbar ist. Setzen Sie dieses Feld also für die Spalte, in derSie die Abfrage „A_MedienTyp“ verwenden, auf „Nein“. Das Feld ist nun nicht mehr aufklappbar,
aber diese Funktion benötigen wir ja nicht, es genügt uns, dass zu jedem Medium der Medientyp
im Klartext angezeigt wird.
Speichern Sie die Änderungen im Formular-Dokument und im Datenbank-Dokument.

Bearbeiten des Formular-Dokuments
In „Bearbeiten des Formulars“ auf Seite 22 hatten wir schon erste Änderungen am Formular-Dokument bzw. an seinen Bestandteilen vorgenommen. Um es optisch zu optimieren, ist eine Menge
Detailarbeit vonnöten, die wir hier nicht in allen Einzelheiten darstellen wollen, die dazu nötigen
Aktionen sind leicht zu finden. Wir zeigen nur exemplarisch einige prinzipielle Anpassungen.

38•

Durch Anklicken eines Elements und anschließendes Verschieben (durch Anfassen mit derMaus oder mit den Pfeiltasten oder mit den entsprechenden Feldern in den Eigenschaften)
haben wir den Abstand zwischen den Tabellen verkleinert.

•

Im dritten (dem neuen) Tabellenelement haben wir im Spaltenkopf die rechte Begrenzung
des Titels weit nach rechts verschoben, um Platz für die langen Titel eines Mediums zu
schaffen.

•

Beispielhaft haben wir für die oberste Tabelle ein Beschriftungsfeld (über die Symbolleiste)eingefügt, ihm den Titel „Komponist“ gegeben, die standardmäßig gesetzte Verankerung

Einführung in Base„als Zeichen“, die keine Verschiebung zulässt, auf „am Absatz“ geändert, dann das Feldetwas verschoben und die Schriftgröße erhöht und den Schriftgrad auf „fett“ geändert.

•

Hauptsächlich für das Erzeugen der Abbildung haben wir auch alle Tabellenelemente in der
Höhe reduziert. Welche Höhe – und damit, welche Anzahl an Zeilen – das jeweilige
Element haben soll, hängt natürlich von der bei Ihnen üblicherweise verfügbaren Größe
des Bildschirms ab.

Verwendung des erweiterten Formulars
Wir können nun das Formular-Dokument benutzen, um weitere Daten in unsere Datenbank
einzugeben. Bereits in „Datenanzeige und -verwaltung in der Tabellensicht“ auf Seite 17 hatten wir
ein Medium mit den Werken von Maurice Ravel erfasst. Nun können wir wir den Komponisten,seine Werke und die Zuordnung zum Medium in unserem Formular-Dokument eingeben(Abbildung 21). Das Werk geben wir einfach ein, das Medium wählen wir über die aufklappbare
Liste aus, der Medientyp wird beim Speichern automatisch dann auch angezeigt.

Abbildung 21: Dreistufiges Formular mit eingefügter Verbindung zum Medium

Vorläufiges Fazit
Der nun erreichte Stand des Formulars ist nun, abgesehen von der schon genannten Anpassung
des Layouts, prinzipiell schon recht gut geeignet für die Verwaltung der vorgesehenen Daten, auchwenn er noch Defizite hat:
Er geht im Grunde von der Situation aus, dass die Medien, denen wir Werke zuordnen wollen, vonirgendwem bereits erfasst wurden. Das ist eine normale Situation in einer arbeitsteiligen Welt;
wenn Sie z.B. die etwas komplexere Situation einer Buchhaltung betrachten, dann werden Lieferanten und Kunden meist von einem anderen Personenkreis verwaltet als dem, der Buchungen
Erweiterung des Formular-Dokuments auf weitere Ebenen

39vornimmt und sich dabei auf diese bezieht. Nun kann man mit Base durchaus auch solche komplexen, für eine Vielzahl von Benutzern mit unterschiedlichen Rechten konzipierten Anwendungenerstellen. Ein wichtiger Anwendungsbereich sind jedoch auch Anwendungen, die im Wesentlichen
von einer einzigen Person bedient werden und dafür auch möglichst gut optimiert sein sollen. Fürdiese ist ein Formular, das die Erfassung eines Mediums und dessen Zuordnung zu Werken im
Vorgehen möglichst eng verzahnt, wünschenswert. Beispielhafte Lösungen für diese Anforderungen zeigen wir in „Funktionale Erweiterungen des Formulardokuments“ auf Seite 50; aber zunächst werden wir, nachdem die Datenstruktur nun etabliert ist, die Möglichkeiten zur Auswertung
beschreiben. Diese sind auch unabhängig von irgendwelchen Feinheiten bei der Datenverwaltung,da sie auf den Datenbankinhalten basieren.

Berichte
Sie können grundsätzlich auf angemeldete Datenbanken (vgl. „Schritt 2: Anmelden, Speichern“ aufSeite 12) aus anderen LibreOffice-Modulen zugreifen und daraus Berichte irgendeiner Formerzeugen. Wie dies prinzipiell funktioniert, wird in „Datenquellen in LibreOffice verwenden“ aufSeite 60 beschrieben.
Hier geht es allerdings darum, wie Sie aus den Daten einer Datenbank einen Bericht mit Hilfe desReport Builders erzeugen können. Dieser wird als Unterdokument im Datenbank-Dokument
angelegt und kann in zwei Formen erzeugt werden:•

ein statischer Bericht enthält immer die Daten zum Zeitpunkt seiner Erzeugung; er dientalso eher zur Dokumentation eines definierten Zustands•

ein dynamischer Bericht lädt bei jedem Aufruf die aktuellen Daten aus der Datenbank undbasiert seine Anzeige auf diesen; dies ist also die Wahl für periodisch oder häufiger
benötigte Berichte. Wenn Sie bei einem dynamischen Bericht das Ergebnis aufbewahren
wollen, müssen Sie es selbst irgendwo speichern.

Der Report Builder wurde von Sun entwickelt und firmiert seit der Übernahme von Sun durch
Oracle unter Oracle Report Builder. Er erzeugt ein Writer-Dokument mit Feldbefehlen, die die
Daten mit der spezifizierten Anordnung darstellen.
Sie können den Report Builder direkt aufrufen, indem Sie im Aufgabenbereich „Berichte“ Bericht
in Entwurfsansicht erstellen… wählen. Oder Sie können ihn indirekt durch Verwendung desAssistenten über Bericht unter Verwendung des Assistenten erstellen… aufrufen.
Der Assistent führt Sie durch die Schritte, die zur Erstellung eines Reports nötig sind, in der Regelwerden Sie jedoch dennoch Korrekturen am Erscheinungsbild (vor allem Feldgrößen) oder
eventuell an der Grundstruktur des Reports benötigen, die Sie dann über die direkte Bearbeitungdes Berichts (siehe „Berichte in der Entwurfsansicht erstellen“ auf Seite 45) vornehmen müssen.
Das wird sich im Verlauf der beispielhaften Durchführung noch deutlicher zeigen. In manchen
Fällen kann Ihnen der Start mit dem Assistenten einige Arbeit abnehmen, so dass Sie danach nur
noch Korrekturen vornehmen müssen; häufig jedoch ist der Anpassungsaufwand auch höher als
der Gewinn beim Erzeugen, denn auch die Entwurfsansicht lässt sich sehr effektiv bedienen.
Ein Bericht basiert in der Regel auf einer Abfrage, nur in Ausnahmefällen auch direkt auf einer
Datenbank-Tabelle, weil in den meisten Fällen eine einzige Tabelle nicht alle Informationen enthält,
die in einem Bericht benötigt werden. Sie müssen also meist die Daten, die Sie auswerten wollen,
mithilfe einer Abfrage in das passende Format einer Tabelle bringen, deren Spalten Datenfelder
und deren Zeilen Datensätze sind. Aber wir starten zunächst mit einem Bericht, der auf einer
einzelnen Tabelle basiert.

40

Einführung in Base

Bericht unter Verwendung des Assistenten erstellen
Wählen Sie im Aufgabenbereich „Berichte“ Bericht unter Verwendung des Assistenten
erstellen… Sie können nun unter Tabellen und Abfragen die entsprechende Tabelle oder Abfragewählen, in unserem Fall ist das die Tabelle „Medium“ (Abbildung 22).
Wir wählen mittels der Schaltfläche > die Spalten MedienTyp, MedienTitel und ErschJahr aus, dieMedienId als intern benötigte Information lassen wir weg, ebenso das Bild des Covers. Der
Assistent kann damit schon umgehen, aber das Bild braucht mehr Platz als der Rest der Spalten(der Grund, warum die Spalte bei der tabellarischen Darstellung im Formular ignoriert wurde),
deshalb ist Nacharbeit nötig, die wir bei diesem Beispiel gar nicht vornehmen wollen. Beachten
Sie, dass wir die Felder in einer von der angebotenen abweichenden Reihenfolge ausgewählt
haben, damit die Felder in der Liste in einer logischen Reihenfolge angeboten werden; aus einem
unerfindlichen Grund ist in der Tabelle das Erscheinungsjahr vor dem Titel definiert, was für das
Datenbanksystem natürlich völlig egal ist.

Abbildung 22: Report-Builder-Assistent: Schritt 1

Weitere Schritte
Wir könnten nun mittels Fertigstellen den Assistenten alle weiteren Festlegungen selber treffen
lassen, aber wir wollen ja sehen, was der Assistent alles behandelt. Wir ziehen es daher vor, dienächsten Schritte selbst bei Bedarf zu beeinflussen.

•

Schritt 2 (s. die Auflistung links in Abbildung 22) ermöglicht Ihnen, die Feldbeschriftungenanders als die aus den Datenbanknamen entnommenen Bezeichner zu vergeben.

•

In Schritt 3 wählen Sie, nach welchen Spalten der Abfrage Sie den Bericht gruppieren wollen. Durch eine Gruppierung werden alle Datensätze mit gleichen Inhalten in den für die
Gruppierung verwendeten Spalten zusammengeführt. Eine Gruppierung beinhaltet somit
eine Sortierung nach diesen Spalten, um die Datensätze überhaupt zusammenführen zu
können. Eine Gruppe bedeutet darüber hinaus auch, dass Sie gewisse Eigenschaften derGruppe anzeigen möchten; die am häufigsten benötigten sind Überschriften für die Gruppe,
die meist vor der Ausgabe des ersten Satzes der Gruppe ausgegeben werden, undSummen und ähnliche Querschnittsfunktionen, die meist nach dem letzten Satz der Gruppe

Berichte

41

ausgegeben werden.
Bei einer einzelnen Tabelle bietet sich oft gar kein Kriterium für eine Gruppierung an, aberin unserem Fall können wir den Medientyp als Gruppierungskriterium verwenden, damit wir
eine deutliche Trennung von CDs , DVDs usw. erhalten. Und wir werden im Vergleich deserzeugten Reports mit dem Pendant ohne Gruppierung sehen, dass das Ergebnis sogar
brauchbarer ist.

•

In Schritt 4, der Definition der Sortierkriterien, stellen Sie sofort fest, dass die Gruppierungsbegriffe auch zu Sortierbegriffen gemacht wurden. Denn Gruppeninformationen wie Überschriften und Summen sind nur sinnvoll, wenn die Daten auch entsprechend sortiert sind.
Sie können hier weitere Sortierkriterien angeben und dabei die Sortierrichtung „aufsteigend“ – was der Standardwert ist und insbesondere bei Textfeldern auch praktisch immer
die richtige Wahl, weil es die Sortierung nach dem Alphabet bedeutet – und "absteigend"
wählen. In unserem Fall sortieren wir noch – aufsteigend – nach Medientitel.

•

Im Schritt 5 „Auswahl des Layouts" können Sie zwischen verschiedenen Varianten wählen,
die vielleicht verständlich sind, wenn man schon ein wenig Erfahrung mit dem Assistenten
hat, aber beim ersten Einstieg nicht sehr klar sind. Probieren Sie die Varianten einfach aus,in der symbolischen Darstellung im Hintergrund sehen Sie den Effekt sofort.
Wir bleiben beim Vorschlag „tabellarisch“.

•

Schritt 6 „Bericht erstellen" schließt den Assistenten ab, indem Sie einen Namen für den
Bericht vergeben, wählen, ob er statisch oder dynamisch sein soll (s. „Berichte“ auf Seite40), und entscheiden, ob Sie ihn gleich anschauen wollen oder erst Korrekturen am Layout
vornehmen wollen.
Da wir noch dabei sind, uns mit dem Erstellen von Berichten vertraut zu machen, wählen
wir das Erstellen des Berichts, um einen ersten Eindruck zu erhalten. Wenn wir die weitere
Bearbeitung des Layouts wählen würden, würden wir in der Entwurfsansicht landen, die in„Berichte in der Entwurfsansicht erstellen“ auf Seite 45 beschrieben wird,

Das Ergebnis zeigt Abbildung 23.

Abbildung 23: Bericht durch Assistenten erzeugt
Das Ergebnis sieht ganz brauchbar aus. Das rote Dreieck beim vierten Medium bedeutet, dass der
Titel nicht vollständig angezeigt wird, es werden offensichtlich nur ganze Wörter gezeigt. Das ließe
sich in der Entwurfsansicht schnell durch Verbreitern der Spalte – Platz ist noch vorhanden –ändern.
Vergleichen Sie damit das Ergebnis, wenn keine Gruppierung angefordert wurde (Abbildung 24):

42

Einführung in Base

Abbildung 24: der gleiche Bericht ohne Gruppierung
Der Effekt, dass die Feldbezeichner viel zu häufig gedruckt werden, was den Platzbedarf erhöht,
zeigt sich in vielen Fällen der vom Assistenten erzeugten Listen. Der Assistent kann eben aufgrund
der spärlichen Information nichts Besseres erzeugen. Für eine schnelle Übersicht, die man ja unabhängig von der Datenbank sofort als Textdokument speichern und verschicken kann, sind solche
Berichte auf jeden Fall verwendbar, und manchmal entsprechen sie auch bereits weitergehenden
Anforderungen und sind schnell noch in Details angepasst. Aber in vielen Fällen ist die Erzeugungeines Berichts mit der Entwurfsansicht wegen der vielfältigeren Gestaltungsmöglichkeiten wesentlich günstiger.

Eine Abfrage für Berichte
Wir werden nun einen komplizierteren Bericht mit Hilfe der Entwurfsansicht erzeugen. Dazu
benötigen wir aber zunächst eine Sicht, die alle Spalten aller unserer Tabellen enthält:
Wählen Sie wieder Abfrage in der Entwurfsansicht erstellen und fügen Sie alle fünf von uns definierten Tabellen hinzu. Das Schema der Tabellen und ihrer Relationen, das daraufhin angezeigt,
entspricht dann inhaltlich der Abbildung 18 auf Seite 35, auch wenn die Anordnung der Tabellen im
Bild etwas anders sein wird. Wählen Sie dann alle Spalten aus allen Tabellen aus, mit Ausnahme
der Spalten, die aufgrund der Relationen miteinander verknüpft sind, da wählen Sie nur eine der
beiden Spalten, es ist egal, welche. Nennen Sie die Abfrage z.B. „Gesamt“.

HinweisWir wählen bei dieser Abfrage alle Spalten, damit wir bei zukünftigen Auswertungenalle Möglichkeiten haben. Das ist bei unserer überschaubaren Datenbank kein
Problem. Bei größeren Datenbanken mit deutlich mehr (und wahrscheinlich auchumfangreicheren) Tabellen muss man sich Gedanken über sinnvolle Kombinationen
der Tabellen machen, weil die Kombination aller Tabellen eventuell sehr viele Sätze
ergibt und dementsprechend auch eine lange Laufzeit bei der Erstellung der Abfragenach sich zieht.

Ganz wichtig ist die Angabe der Bedingungen, die die Spalten unterschiedlicher Tabellen verknüpfen. Zum Glück werden diese automatisch eingefügt, wenn Sie die entsprechenden Relationen
definiert haben. Denn eine Kombination von zwei Tabellen liefert zunächst ein Ergebnis, dessen
Zeilenanzahl gleich dem Produkt der Zeilenanzahlen der beiden Tabellen ist, denn jede Zeile dereinen Tabelle wird mit jeder der anderen kombiniert, es sei denn, die Abfrage schränkt das ein.
Nehmen wir als Beispiel die 1:n-Beziehung zwischen Komponist und Werk: ohne Berücksichtigung
der Relation der Spalten KompId in beiden Tabellen würde jedes Werk mit jedem Komponisten
verknüpft, was nicht nur widersinnig ist, sondern auch die Ergebnistabelle riesig werden lässt. Mit
jeder weiteren verknüpften Tabelle droht eine weitere Vervielfachung, wenn eine Bedingungübersehen wurde. Um das noch einmal an unserer Datenbank drastisch klarzumachen: Ohne
jegliche Einschränkung hätte die Kombination der fünf Tabellen ein Ergebnis, dessen Zeilenanzahl
das Produkt der Zeilenanzahlen aller fünf Tabellen wäre, mit den Bedingungen aus den Relationen
ist deren Zeilenanzahl gleich der der einzigen Tabelle Werk_Medien!

Berichte

43

In unserem Fall sorgen also die definierten Relationen für eine sinnvolle Einschränkung der Zeilenanzahl des Ergebnisses der Abfrage, und über die Laufzeit der Kombination der fünf Tabellen müssen wir uns bei der doch sicher sehr begrenzten Anzahl von Aufnahmen keine Sorgen machen.
Deshalb reicht uns diese eine universelle Abfrage für alle („normalen“) Auswertungen. Ein OnlineHändler mit Hunderttausenden von Artikeln und dementsprechend auch vielen Tabellen, um die
Besonderheiten gewisser Artikelgruppen zu berücksichtigen, wird sicher für gewisse Auswertungenspezielle, eingeschränkte und damit schneller ausführbare Abfragen definieren.

HinweisDie Abfrage „Gesamt“, die wir definiert haben, enthält alle Aufnahmen, also alle
Kombinationen eines Werks mit einem Medium, plus alle damit verknüpften Informationen. Was sie nicht enthält – weil sie eben nur das beinhaltet, was vollständig
verknüpft ist – sind Werke, die nicht mit einem Medium verknüpft sind, und Medien,
die nicht mit einem Werk verknüpft sind, und auch, mit geringerer Relevanz, Komponisten ohne Werk oder Medientypen ohne ein diesen verwendendes Medium.
Solche Fragestellungen – die versuchen, die Ausnahmen, Unvollständigkeiten und
Sonderfälle in der Datenbank zu finden – können Sie sehr wohl in Abfragen behandeln, allerdings können Sie diese Abfragen nicht durch die Entwurfsansicht oder gar
den Assistenten erzeugen, Sie müssen sie in der SQL-Ansicht erstellen. Weitere Informationen finden Sie im Base-Handbuch sowie grundsätzlich in Quellen über SQL.

Dass wir doppelte Spalten, die durch die Verknüpfungsbedingungen ja identische Inhalte haben,
nur einmal in die Abfrage aufnehmen, ist dagegen von geringerer Bedeutung. Es schadet nichts,
wenn die Spalten mit identischem Inhalt zweimal vertreten sind, aber es spart etwas Platz undLaufzeit beim Erstellen und Verarbeiten. Bei größeren Datenmengen kann das durchaus ein
zeitlich merkbarer Vorteil sein, und andererseits erfordert die Beachtung dieses Prinzips bloß einen
einmaligen minimalen Aufwand.

Die Struktur eines Berichts
Bevor wir nun den Bericht mit der Entwurfsansicht erstellen, werfen wir einen Blick auf die Struktureines Berichts, wie sie bereits unser einfacher Bericht der Medien bietet. Wählen Sie dazu für den
in „Bericht unter Verwendung des Assistenten erstellen“ auf Seite 41 erstellten Bericht
Kontextmenü → Bearbeiten (Abbildung 25 zeigt das dadurch geöffnete Dokument, nachdem
Spaltenbreiten und Abschnittshöhen zugunsten der besseren Darstellbarkeit verändert wurden).

Abbildung 25: Struktur eines Berichts
Sie erkennen, dass die Entwurfsansicht in mehrere symbolische Bereiche gegliedert ist, die ihr
Pendant im Aussehen der Liste haben:

44

Einführung in Base•(gelborange) den Seitenkopf und -fuß, mit dem wir bisher nichts getan haben. Sie können
hier Listentitel, Firmennamen, Erläuterungen, Datum, Seitennummer und sonstige Felder,die die ganze Liste betreffen, einfügen (siehe „Schritt 3: Platzierung der Felder“ auf Seite
47).

•(blau) ein Bereich, der der von uns definierten Gruppe entspricht•(rot) den Bereich, in dem die Daten eines einzelnen Satzes gezeigt werden•

Sie erkennen weiter die Benennungen, die in der Liste erscheinen, und die Datenfelder mit
ihrer Größe, die durch das umrahmende Rechteck angedeutet wird.

Mit diesen Abschnitten eines Berichts werden wir nun in der Entwurfsansicht arbeiten.

Berichte in der Entwurfsansicht erstellen
HinweisWenn Sie einen bestehenden Bericht zum Bearbeiten aufrufen, haben Sie die
gleichen Möglichkeit, wie sie im Folgenden beim Erstellen eines neuen Berichts
beschrieben werden.

Schritt 1: Datenbestand auswählen
Wählen Sie im Aufgabenbereich „Berichte“ Bericht in Entwurfsansicht erstellen… Sie erhalten
ein Bild ähnlich dem in Abbildung 26 gezeigten. Das Fenster besteht aus zwei Teilbereichen:•links der Entwurfsbereich für den Bericht, zunächst nur mit den Teilbereichen Seitenkopf
und -fuß und Detail•rechts das Eigenschaftsfenster, das je nach gewähltem Objekt unterschiedliche Daten
zeigt, eventuell auf mehrere Reiter verteilt. Zu Beginn zeigt es die Eigenschaften derDatenquelle an.
Darüber hinaus können durch Menüaufrufe oder Betätigung von Symbolen noch „schwebende“
Dialogfenster geöffnet werden; zu Beginn wird so automatisch der Dialog Feld einfügen angezeigt.

Hinweis

Berichte

Wie üblich sollten Sie von Zeit zu Zeit Ihre Eingaben sichern. Speichern Sie dazu
zunächst im Editorfenster und dann auch im Datenbank-Startfenster, erst dann ist
die Speicherung vollständig.

45

Abbildung 26: Erstellen eines Berichts in der Entwurfsansicht, erster Schritt
Der Dialog Feld hinzufügen überdeckt eventuell den rechten Abschnitt mit den zwei Reitern, verschieben Sie dann das Fenster. Denn Sie müssen wie beim Assistenten als erstes die richtige
Tabelle oder Abfrage wählen; wahrscheinlich wird zunächst die laut Alphabet erste Tabelle
angezeigt. Wählen Sie die Abfrage „Gesamt“, wie in der Abbildung gezeigt.

Schritt 2: Gruppierung und Sortierung
Im Unterschied zu Abbildung 25 haben wir noch keine Bereiche für die Gruppen, in denen wir ja
einige Felder platzieren wollen. Es ist sinnvoll, diese zunächst zu erzeugen, damit dann alle Felder
gleich im richtigen Bereich platziert werden können.
Rufen Sie dazu über Ansicht → Sortierung und Gruppierung oder das entsprechende Symbol(Abbildung 27) den Dialog Sortierung und Gruppierung auf (Abbildung 28, bereits ausgefüllt).

Abbildung 27: Symbol Sortierung und Gruppierung
Im oberen Bereich des Dialogs können Sie die Sortier- und Gruppierfelder bestimmen (dieÜberschrift „Gruppen“ ist leicht irreführend), im unteren Teil werden die Eigenschaften desgewählten Feldes gezeigt.
Die Bedienung dieses Dialogs ist nun etwas gewöhnungsbedürftig, weil die Konzepte derGruppierung und Sortierung miteinander verquickt werden, aber in der Tat sind sie, wie wir bereitsin „Weitere Schritte“ auf Seite 41 gesehen haben, nicht voneinander unabhängig.
Der Bericht soll pro Komponisten dessen Werke auflisten, zu jedem Werk dann die Medien, auf
denen es enthalten ist. Daher müssen die Daten zunächst nach dem Komponisten sortiert sein,
also nach Nachnamen, dann Vornamen, zur Sicherheit dann noch nach den Lebensdaten, falls
Elternteil und Kind den gleichen Namen tragen. Im allgemeinen Fall würde das eventuell auch
46

Einführung in Basenicht ausreichen (falls wir keine Lebensdaten haben), wirkliche Eindeutigkeit bringt erst das Feld
KompId, das wir denn auch als Gruppierungsfeld verwenden. Das heißt, dass wir bei den ersten
drei Feldern Nachname, Vorname, Lebensdaten die Eigenschaft „Gruppenkopf“ auf „Nicht
vorhanden“ setzen und erst bei der KompId, die uns eine sichere Unterscheidung bietet, die
Gruppierung vornehmen. Entsprechend tun wir das sicherheitshalber beim Werk: wir sortieren
zunächst nach dem Werktitel, aber zusätzlich nach der WerkId, nach der erst gruppiert wird.
Ebenso sortieren wir nach Werknummer und Werktitel, verwenden aber erst die WerkId zum
Gruppieren, und schließlich auch MedienId, während wir Medientyp und -titel nur zum Sortieren
verwenden.
Sie sehen hier also wieder Beispiele, warum eindeutige Identifikatoren sinnvoll sind.

Abbildung 28: Sortierung und Gruppierung
Beim Eintragen von Gruppierungsfeldern ändert sich im Hintergrund das Schema des Berichts, die
symbolischen Bereiche für die Gruppierungen werden hinzugefügt.
Den Dialog können Sie nun schließen.

Schritt 3: Platzierung der Felder
Wählen Sie nun im wahrscheinlich noch geöffneten Dialog Feld hinzufügen (ansonsten überAnsicht → Feld hinzufügen oder das entsprechende Symbol wieder aufrufen) ein Feld, das auf
der Liste erscheinen soll, und klicken Sie im Listenentwurf den Bereich an, in dem es platziert
werden soll; dann wählen Sie Einfügen oder drücken die Eingabe-Taste, oder verschieben Sie
das gewählte Feld direkt mit der Maus.

Tipp

Manchmal wird das Feld dabei noch im vorher verwendeten Bereich platziert,
obwohl schon ein neuer markiert ist. Löschen Sie dann einfach die noch markierte
Gruppe von Feldbezeichner und Feld oder verwenden Sie Rückgängig und fügen
Sie das Feld erneut ein. Oder ziehen Sie die noch markierte Gruppe einfach mit derMaus in den richtigen Bereich.

Abbildung 29 zeigt das Ergebnis nach Platzierung einiger Felder. Die Bereiche für den Seitenkopf
und die Gruppierungen wurden dabei schon teilweise in ihrer Höhe reduziert, damit die Abbildung
Berichte

47

weniger Platz braucht, aber Sie werden das ja auch in Ihrer Liste benötigen. Sie können die Höheeines Bereichs verändern, indem Sie – in dem Abschnitt, in dem oben das Lineal angezeigt wird –mit der Maus die Trennlinie zum nächsten Bereich verschieben.

Abbildung 29: Platzierung von Feldern
Sie sehen, dass immer ein Paar aus Feldbenennung und symbolischem Feldinhalt generiert wird.
In formularartigen Listen können Sie das so ganz gut gebrauchen, in unserer derzeitigen Liste
benötigen wir viele Feldbenennungen nicht oder nicht so wie generiert:•

beim Komponisten reicht es, wenn wir Namen und Lebensdaten hintereinander stellen, die
Bedeutung ist ohne Benennung klar.

•auch der Werktitel ist eigentlich selbsterklärend, aber vielleicht ist es doch besser, auf jeder
Seite, also am besten im Seitenkopf, die Überschrift zu haben.

•

die Daten zum Medium, von denen wir hier erst zwei hinzugefügt haben, möchten wir gerne
in einer Zeile hintereinander sehen. Die Überschriften sind aber ebenfalls besser im Kopf
einer Seite aufgehoben, da sie sonst vielfach pro Seite wiederholt würden.

•

die Felder für den Dateninhalt haben alle gleiche Länge, wir müssen sie anpassen. Der
Werktitel ist auf jeden Fall zu kurz, aber auch beim Nach und Vornamen des Komponisten
braucht es mehr Platz.

•

Es macht die Liste übersichtlicher, wenn Untergruppe und die Detaildaten etwas eingerückt
werden (was der Assistent auch täte).
Verschieben Sie einfach die generierten Objekte mit der Maus (Anklicken, Maustaste gedrückt
halten und Loslassen am Ziel) oder löschen Sie nicht benötigte Objekte.
Abbildung 30 zeigt das aufgrund der genannten Anforderungen bis jetzt erreichte Ergebnis.

Abbildung 30: Verschieben und Anordnen der Felder und Benennungen48

Einführung in BaseSchritt 4: Weitere Arbeiten am Bericht
Sie haben das grundsätzliche Vorgehen für das Erstellen oder Ändern eines Berichtes kennengelernt, der Bericht ist so, wie er jetzt aussieht, schon einigermaßen brauchbar, auch wenn er
vielleicht noch nicht alle gewünschten Felder enthält. Die weitere Arbeit daran wollen wir nicht
mehr detailliert beschreiben, da die notwendigen Befehle leicht zu finden und zu verwenden sind.

•Über das Menü Einfügen können Sie Felder, Beschriftungen, Datum und Zeit,
Seitennummern, grafische Formen, Bilder und sonstige Gestaltungselemente einfügen.

•Über das Menü Format können Sie mehrere markierte Objekt aneinander oder im Bezug
zur Seite ausrichten.

•Über das Eigenschaftsfenster rechts können Sie das gewählte Objekt beeinflussen,
beispielsweise die Schriftgröße, Textfarbe, Hintergrundfarbe, … ändern
Wir haben als einige Beispiele die Feldnamen im Seitenkopf etwas nach unten geschoben, um
Platz für einen Berichtstitel zu schaffen, den wir größer und fett darstellen, dann eine waagrechte
Linie am unteren Rand des Seitenkopfes eingefügt. Weiter haben wir für den Gruppenkopf derKomponisten und für die darin enthaltenen Felder eine Hintergrundfarbe gewählt und die Schrift
fett ausgegeben. Die Werksangaben drucken wir kursiv.
Den erzeugten Bericht sehen Sie in Abbildung 31.

Abbildung 31: Der Bericht "Medien nach Werken"

Vergleich mit einem vom Assistenten erzeugten Bericht
Abbildung 32 zeigt einen vom Assistenten erzeugten Bericht basierend auf den gleichen Daten.
Auch wenn alle Daten vorhanden sind und der Bericht auch optisch ansprechend ist: aufgrund derPlatzierung aller Felder in einer Zeile braucht er für eine Zeile mehr Platz, bei einer größeren
Anzahl von Feldern ein Nachteil.
Der Assistent kann die Felder, die wir in Gruppenköpfe verschoben haben, schlichtweg nicht selbst
dort platzieren, weil er dazu keine verlässlichen Informationen hat. Einige Beispiele: Sie könnten inder Abfrage die Spalte KompId aus der Tabelle Werk gewählt haben, dann wäre kein Bezug zum
Komponisten erkennbar; die Spalte der Abfrage, die zur Gruppierung dient, könnte – ein Fall, den
wir in dieser Einführung nicht darstellen konnten – aus Spalten mehrerer Tabellen ermittelt worden
sein; oder Sie verwenden eine Datenbanksicht (View), die aus Sicht von Base wie eine einzige
Tabelle aussieht, die Herkunft der Spalten ist nicht mehr erkennbar.
Berichte

49

Abbildung 32: Bericht durch Assistenten erzeugt
Der Assistent liefert also durchaus brauchbare Berichte, bei dauerhaft benötigten Berichten ist
allerdings meist der Anspruch an die Darstellung so speziell, dass eine Erstellung über die
Entwurfsansicht nötig ist.

Funktionale Erweiterungen des Formulardokuments
Um Ihnen noch einen – sehr unvollständigen – Ausblick auf weitere Möglichkeiten von Base zu
bieten, werden wir das Formulardokument „Aufnahmen“ noch um einige Funktionen erweitern:•

wir können, wie schon gesagt, in einer Tabelle keine Grafik anzeigen; einen Weg, die Grafik
dennoch zu zeigen, deuten wir in „Weiteres Formular zur Detailanzeige“ auf Seite 50 an.

•

In einer Mehrbenutzer-Situation – also in unserem Fall der etwas konstruiert wirkenden,
dass die Medien von jemand anders erfasst werden – ergibt sich das Problem, dass neu
erfasste Medien in der Auswahlliste nicht angezeigt werden, weil die Liste von Base aus
Optimierungsgründen standardmäßig nur beim Start des Formulars und nicht bei jedem
Gebrauch geladen wird. Lösungsmöglichkeiten finden sich in „Aktualisieren des Formulars“
auf Seite 50.

•

Unser Beispiel dürfte eher von einem einzigen Benutzer eingesetzt werden. Da wäre es
noch bequemer, wenn die Erfassung eines Mediums im gleichen Formular-Dokument wie
die Erfassung des Werks und seine Zuordnung zum Medium erfolgen könnte. In „Neues
Medium direkt im Formular“ auf Seite 52 und „Direkte Übernahme des Mediums (mit
Makro)“ auf Seite 55 werden wir zwei Möglichkeiten zeigen, wie diese Aufgabe realisiert
werden kann.

Weiteres Formular zur Detailanzeige
Felder, die in der Tabelle der Aufnahmen nicht anzeigbar sind, wie z.B. das grafische Feld, können
Sie – für die jeweils ausgewählte Tabellenzeile – anzeigen, indem Sie ein weiteres Unterformular
zum Formular „Aufnahmen“ – mit der Tabelle „Medium“ – hinzufügen, für das Sie die Darstellung
mit Einzelfeldern wählen und – in unserem Fall – als einziges Feld das grafische Feld wählen. Die
notwendigen Techniken haben Sie bereits kennengelernt.

Aktualisieren des Formulars
Eine klein Schwierigkeit bei Listenfeldern stellt man oft erst in der laufenden Arbeit fest: wenn Sie
ein neues Medium anlegen (oder auch nur den Titel korrigieren) – was nach derzeitigem Standnoch direkt in der Tabelle oder aber auch in einem anderen, ähnlich wie dem Beispiel-Dokument
50

Einführung in Base„Komponisten“ erzeugten Formular-Dokument geschieht – , dann stellen Sie fest, dass diese neue
Situation sich nicht im Listenfeld des bereits geöffneten Formular-Dokuments „Aufnahmen“
niederschlägt: Die Liste zeigt das neue Medium noch nicht an. Dies liegt daran, dass der Zugriff
auf die Liste optimiert ist und daher die Liste nicht bei jedem Aufruf neu gelesen wird, was die
Antwortzeit verlängern würde. Die Liste wird daher standardmäßig nur aktualisiert, wenn Sie das
Formular-Dokument öffnen. Probieren Sie es aus, indem Sie in der Tabelle „Medium“ einen neuen
Eintrag speichern und anschließend im bereits vorher geöffneten Formular-Dokument „Aufnahmen
nach Komponist“ die Liste der Medien aufklappen: der neue Eintrag ist noch nicht sichtbar.
Sie können die Liste auffrischen, indem Sie in die Tabelle klicken und dann über das Symbol= Steuerelement aktualisieren das erneute Laden der Liste (und ggf. anderer Aktualisierungendes Formulars) veranlassen. Etwas benutzerfreundlicher können Sie das über eine Schaltfläche
gestalten.
Fügen Sie dazu in der Entwurfsansicht über die Symbolleiste Formular-Steuerelemente eine
Schaltfläche ein, indem Sie das zugehörige Symbol auswählen und dann an der gewünschten
Stelle mit der Maus ein Rechteck aufziehen. Anschließend können Sie über Kontextmenü →Kontrollfeld... die Eigenschaften bearbeiten. Legen Sie diese Schaltfläche im Formular„Aufnahmen“ an, damit auch nur dieses Formular aktualisiert wird und neue Medien angezeigt
werden, die Antwortzeit ist dadurch kürzer, auch wenn das bei unserem einfachen Beispiel
vielleicht nicht spürbar ist. Um das sicherzustellen, markieren Sie die zugehörige Tabelle oder im
Formular-Navigator das Formular. Wenn Sie allerdings auch damit rechnen müssen, dass jemandneue Komponisten oder Werke erfasst hat, die Sie sofort sehen wollen – in unserem Beispiel einsehr theoretischer Fall – , dann ordnen Sie die Schaltfläche einem übergeordnete Formular zu.
Vergeben Sie einen passenden Namen und einen passenden Titel (in Abbildung 33 haben wir
Mediendaten aktualisieren gewählt), und wählen Sie Formular → Aktion → Formularaktualisieren. Das bewirkt, dass alles, was im Formular aktualisierbar ist, aktualisiert wird, unter
anderem wird die Liste zu einem Listenfeld neu aufgebaut. Das ist eventuell mehr, als wir
benötigen, und kann im Extremfall auch zu einer Verzögerung in der Antwortzeit führen, wo wirdann durch Programmieren eine optimierte Behandlung realisieren müssen, aber normalerweise
ist das ein einfacher, weil ohne Programmierung, zu realisierender und performanter Weg.
Wenn Sie nun annehmen, dass neue Medien vorhanden sind, die seit dem Öffnen des FormularDokuments „Aufnahmen nach Komponist“ angelegt wurden, oder das sogar wissen, weil Sie das
selbst getan haben, dann können Sie diese Schaltfläche betätigen, anschließend zeigt die Liste
auch die neu angelegten Medien an. Abbildung 33 zeigt das Formular mit einigen zusätzlichen
Anpassungen der Spaltenbreiten in den Tabellen, um die Inhalte in der Regel vollständig
anzuzeigen.

Funktionale Erweiterungen des Formulardokuments

51

Abbildung 33: Schaltfläche "Mediendaten aktualisieren"

Neues Medium direkt im Formular
In unserer jetzigen Situation sind wir darauf angewiesen, dass ein neues Medium an anderer
Stelle, im einfachsten Fall in der Tabelle direkt, besser aber in einem Formular, angelegt wird. Das
ist in vielen Fällen auch das gebotene Vorgehen, z.B. aufgrund von Arbeitsabläufen oder wegengetrennter Verantwortlichkeiten.
In unserem Beispiel, das eher auf einen Ein-Personen-Betrieb zugeschnitten ist, wäre allerdings
die Aufnahme eines neuen Mediums direkt in unserem Formular-Dokument bequemer. Dabei ist
die eigentliche Verwaltung der Medien im gleichen Formular-Dokument durch den Standard einfach zu lösen, Schwierigkeiten bereitet nur die Kopplung der Formulare: hier muss ein Formular(Aufnahmen) nicht nur mit dem hierarchisch übergeordneten sondern auch mit einem weiteren(dem neuen für die Medien) irgendwie verknüpft werden.
Wir müssen dazu zunächst die Möglichkeit schaffen, dass man ein neues Medium direkt im
Formular-Dokument erfassen kann. Wir brauchen dazu natürlich ein neues Formular fMedien, das
wir mit der Tabelle „Medium“ verbinden. Da die Tabelle keiner anderen untergeordnet ist, müssen
wir das Formular direkt unter dem obersten, neutralen Knoten „Formulare“ anlegen. Die Techniken
dazu haben wir bereits kennengelernt. Eine Verknüpfung zu einem übergeordneten Formular wird
gar nicht angeboten, weil es ein solches nicht gibt.
Wir wollen über dieses Formular nur neue Medien erfassen, um uns einen Wechsel zu einem
anderen Formular-Dokument, in dem die Medien verwaltet werden, zu ersparen. Wir schränken
daher, um uns selbst vor Fehlern zu bewahren, die Verwaltungsmöglichkeiten ein: wo wir in Schritt
7 in „Erzeugen des Formulars mit dem Assistenten“ auf Seite 19 noch die vorgeschlagene
Einstellung akzeptiert hatten, ändern wir nun das Feld „Nur Daten hinzufügen“ auf Ja: Wenn wir
ein Medium löschen oder später ändern wollen, dann in einem anderen Formular mit einer Tabelle(oder notfalls in der Verwaltungsansicht der Tabelle selbst), wo wir eine bessere Übersicht haben.
Die Änderung der Daten lassen wir zu, weil wir uns ja bei der Eingabe vertippt haben könnten undsomit eine Korrektur vornehmen wollen. Für den gewünschten Zweck ist die Eingabe über einzelne
Felder die beste Lösung.
Die Felder des neuen Formulars platzieren wir rechts von den Komponisten-Daten, das Ergebnis
sehen Sie in Abbildung 34.

52

Einführung in Base

Abbildung 34: Formular mit Einzelfeldern

Hinzufügen von Einzelfeldern
Die Definition von Einzelfeldern ist etwas aufwändiger als für Spalten in einem Tabellengitter, denn
wir müssen jeweils das Datenfeld und das Beschriftungsfeld getrennt definieren und positionieren.
Wie wir dazu prinzipiell vorgehen müssen, wurde schon in „Aktualisieren des Formulars“ auf Seite
50 beschrieben, wir fassen uns hier kurz und gehen nur auf Besonderheiten ein:
1. Vom Einfügen des neuen Formulars fMedien sollte im Formular-Navigator dieses Formularnoch markiert sein; wenn nicht, markieren Sie es, damit die neuen Felder diesem Formularzugeordnet werden.
2. Fügen Sie ein Listenfeld ein, das als Datenfeld „MedienTyp“ hat, deshalb geben wir ihm
auch den Namen „MedienTyp“. Wir haben dafür bereits eine Tabelle, die wir nun ähnlich
wie in „Ein Listenfeld für den Medientyp“ auf Seite 23 angeben.
3. Für das Erscheinungsjahr wählen wir über Weitere Steuerelemente das Symbol
numerisches Feld, weil wir damit wenigstens sicherstellen können, dass nur ganzzahlige
numerische Werte eingegeben werden können: wir setzen zusätzlich die Anzahl der Nachkommastellen auf 0. Die Felder für den minimalen Wert und den maximalen Wert werden
leider nicht zur Prüfung herangezogen, sondern dienen nur als Anfangswert und Begrenzung, wenn Sie mit den Pfeiltasten Nach-Unten oder Nach-oben den Wert (in Schritten, diedurch das Feld Intervall festgelegt werden) ändern.
Wir benennen das Feld wie das Datenbankfeld „ErschJahr“.
4. Für den Medientitel wählen wir das Symbol Textfeld, als Name setzen wir wieder den
Namen des Datenbankfeldes.
5. Für alle drei Felder müssen wir nun ein Beschriftungsfeld – so heißt auch das Symbol –einfügen, damit der Anwender weiß, was er in welches Feld eingeben soll.
6. Beachten Sie, dass wir für die MedienId kein Feld definiert haben: wir müssen es nicht
sehen, aber das Formular kennt es, weil es den Bezug zur Tabelle hat.
7. Um die Eingabefelder optisch zusammenzuhalten, fügen wir nun noch einen Gruppierungsrahmen ein (über Weitere Steuerelemente). Legen Sie über Kontextmenü → Anordnung→ Ganz nach hinten fest, dass die zuvor erstellten Felder als grafische Objekte vor dem
Rahmen liegen, sonst haben Sie später im Entwurfsmodus Schwierigkeiten, eines derFelder auszuwählen. Das ist ein Aspekt, den Sie überall in LibreOffice bei sich überschneidenden grafischen Objekten bedenken müssen: ein später angelegtes Objekt liegt immer
vor dem früher angelegten.

Funktionale Erweiterungen des Formulardokuments53

8. Platzieren Sie noch eine Navigationsleiste unterhalb oder auch innerhalb des Rahmens.
Sie ist nicht unbedingt nötig, aber es ist vielleicht schwer zu durchschauen, dass man erstin eins der Felder des neuen Formulars klicken muss, damit die Symbole der allgemeinen
Navigationsleiste sich auf das gewählte Formular beziehen. Die spezielle, dem Formularzugeordnete Navigationsleiste macht das klarer.
Beim Tabellengitter ist die Navigationsleiste ja automatisch integriert.
9. Um auch das Cover-Bild einfügen zu können, fügen wir weiter ein grafisches Steuerelement ein, allerdings deutlich kleiner als in Abbildung 8 auf Seite 22, damit es in den Rahmen passt. Die Farbe haben wir etwas heller als den Hintergrund gewählt, damit man sieht,
wo man doppelklicken muss, und um das noch deutlicher zu machen, haben wir ein Beschriftungsfeld mit erklärendem Text davor platziert; um die optisch schönere Darstellung
des Texts in mehreren Zeilen zu ermöglichen, setzen wir beim Feld „Wortumbruch“ ein „Ja“.
Die neuen Felder, im Moment vor dem Speichern eines Mediums, sehen Sie in Abbildung 34, die
Struktur des Formular-Dokuments zeigt Abbildung 35. Sie sehen dort übrigens, dass wir für die
Objekte aussagekräftige Namen vergeben haben, was die Übersicht erhöht und vor allem beim
Einsatz von Makros (s. „Direkte Übernahme des Mediums (mit Makro)“ auf Seite 55) sehr hilfreichist.
Die neuen Elemente zeigt der Formular-Navigator:

Abbildung 35: Formularstruktur im Navigator nach der Umbenennung der Objekte

Hinzufügen eines Mediums
Wenn wir mit Hilfe des neuen Formulars in unserem Dokument ein neues Medium erfasst haben,
wird das Medium durch Betätigen der Schaltfläche Speichern in der Symbolleiste Formular-Navigation in die Datenbank geschrieben. Noch einfacher aber geht es, wenn wir gleich die Schaltfläche Mediendaten aktualisieren betätigen, da dabei automatisch zunächst der Datensatz
gespeichert wird.

54

Einführung in BaseDirekte Übernahme des Mediums (mit Makro)
Wir können nun die Handhabung des Formulars noch etwas komfortabler machen, indem wir die
direkte Übernahme des Mediums in die Tabelle der Aufnahmen einrichten. Denn das Listenfeld
enthält, wenn unsere Sammlung wächst, bald viele Medien, und dann ist das Auswählen in derListe mühsam. Und schließlich wird das Medium den Werken normalerweise gleich nach derErfassung des Mediums zugeordnet.
Wir brauchen für diese Funktion allerdings ein Makro, so dass Sie sich dafür zusätzliches Wissen
aneignen müssen, wenn Sie so etwas selber machen wollen. Sie sollen aber durch dieses eine
Beispiel eine Ahnung bekommen, welche Möglichkeiten sich durch Makros bieten und was dazu
nötig ist. Wir beschreiben hier nicht, wie und wo Sie das Makro speichern können, dazu sindgrundlegende Beschreibungen im Kapitel 13 „Einführung in Makros“ dieses Handbuchs zu finden.
Wir werden allerdings die notwendigen Schritte unseres Makros beschreiben, damit Sie einen
Eindruck gewinnen, wie mit Makros auf interne Objekte zugegriffen werden kann (s. „Das Makro“
auf Seite 57).

Tipp

Sie können das in „Das Makro“ auf Seite 57 gelistete Makro einfach in die
Zwischenablage kopieren und dann in der Basic-IDE einfügen, die eingekreisten
Ziffern werden dabei einfach ignoriert.

Legen Sie, wenn Sie ein solches Makro oder wenigstens schon mal einen Rumpf mit mindestens„sub“ und Name und „end sub“ erstellt haben, wie zuvor eine Schaltfläche im Formular fMedium
an, mit dem Titel Medium übernehmen, und betätigen Sie im Reiter Ereignisse für das Ereignis
Aktion ausführen die Schaltfläche mit den drei Punkten (Die einzelnen Schritte sind in Abbildung
36 verfolgbar.) . Es wird ein Dialog geöffnet, in dem Sie Makros, die den Ereignissen zugeordnet
sind, verwalten (ein Makro zuweisen oder die Zuweisung löschen) können. Im abgebildeten Dialog
ist im Vorgriff auf das im Folgenden geschilderte bereits der fertige Eintrag, nämlich der Ort desMakros mit Bibliothek, Modul und Makroname eingetragen.
Betätigen Sie die Schaltfläche Makro..., dann wählen Sie innerhalb der verfügbaren Orte das
Makro aus. Wir haben das Makro, weil es klar nur für unsere Anwendung DB_Klassik geschrieben
ist, auch in diesem Dokument angelegt, haben einen Unterordner namens Aufnahmen kreiert unddort in einem vom System mit dem Namen Module1 vergebenen Modul unser Programm hinterlegt. (Der vom System vergebene Name ist in Ordnung, solange wir nicht zu viele Programme inunserem Ordner Aufnahmen haben, die wir deshalb in mehrere Module gliedern wollen. Dannsollten wir gleich Module mit aussagekräftigen Namen definieren, die uns helfen, die Übersicht zu
bewahren, denn eine spätere Änderung ist immer aufwändig.)

Funktionale Erweiterungen des Formulardokuments55

Abbildung 36: Makro zuweisen
Wenn Sie das Makro im unteren Dialog mit OK ausgewählt haben, erscheint es im mittleren
Dialog; die Schreibweise ist eine in der EDV sehr übliche, der wir auch bei der MakroProgrammierung begegnen:

Punktnotation
Zu einem Ausgangsobjekt wird nach einem Punkt ein Unterobjekt, eine Eigenschaft oder (dasErgebnis einer) Methode angegeben. Sie können Dateipfade in dieser Form aufschreiben wie hierden Ort des Makros, das wie oben beschrieben in der Bibliothek „Aufnahmen“ und innerhalb derer
im Modul „Modul1“ abgelegt ist und den Namen „MediumUebernehmen“ trägt, Sie können auch
Menü-Angaben wie Einfügen → Medien → Scannen → Anfordern... genauso gut in dieser Form
darstellen. Diese Notation wird sehr allgemein für alles verwendet, was sich in einer Hierarchie
darstellen lässt unter anderem eben auch in Programmen, wie wir gleich sehen werden.
Wenn wir die Zuweisung des Makros mit OK bestätigen, erscheint der Makroname mitsamt den
Ortsangaben in Punktnotation im entsprechenden Feld im oberen Bild in Abbildung 36.
Speichern und schließen Sie alle zugehörigen Dokumente und öffnen Sie sie dann erneut,
eventuell werden die Änderungen sonst nicht wirksam.

Arbeiten mit der neuen Schaltfläche
Wenn Sie nun ein neues Medium mit Hilfe der kürzlich definierten Einzelfelder erfassen und die
Schaltfläche Medium übernehmen betätigen, dann wird erstens das Medium in die Datenbank
aufgenommen bzw. werden, bei weiterer Betätigung der Schaltfläche, eventuell vorgenommene
Änderungen gespeichert; zweitens wird das Listenfeld aktualisiert (Abbildung 37).

56

Einführung in Base

Abbildung 37: Das Formular mit Übernahme des Mediums in die Tabelle der Aufnahmen
Die Abbildung zeigt den Zustand, nachdem das neue Medium erfasst wurde und die Schaltfläche
Medium übernehmen betätigt wurde. Sie können nun ein weiteres Werk, auch eines anderen
Komponisten, wählen, das ebenfalls auf dem Medium vorhanden ist, und auch diesem Werk dasneue Medium zuordnen, was natürlich noch einfacher als die Auswahl aus der aufgeklappten Liste
ist.

Tipp

Ändern Sie eventuell vorübergehend den Maßstab der Anzeige dieses Dokuments,
um die Details des Bildes besser sichtbar zu machen.

HinweisDie Schaltfläche aktualisieren wurde noch nicht entfernt, obwohl sie jetzt nicht mehr
unbedingt benötigt wird. In manchen Fällen kann sie immer noch nützlich sein.

Das Makro
Wir drucken nun das vollständige Makro ab und erläutern knapp die einzelnen Komponenten, die
wir mit Nummern gekennzeichnet haben.
Sub MediumUebernehmen

1

dim forms as object, formMedium as object, formAufnahme as object
dim medienId as long2

forms = ThisComponent.Drawpage.Forms
3
formMedium = forms.getByName("fMedium")4
if formMedium.isNew thenformMedium.insertRow 5
end ifmedienId = formMedium.Columns.getByName("MedienId").Int
6
formAufnahme = forms.getByName("fKomp").getByName("fWerke").getByName("fAufnahmen")formAufnahme.moveToInsertRow
7
formAufnahme.Columns.getByName("MedienId").updateInt(medienId)
8
formAufnahme.insertRow
formAufnahme.getByName("Aufnahmen_Grid").getByName("Medientitel").refresh 9
formAufnahme.getByName("Aufnahmen_Grid").getByName("Medientyp").refresh
End Sub

Funktionale Erweiterungen des Formulardokuments57

1. Ein Makro beginnt mit dem Schlüsselwort sub – kurz für subroutine – oder function, wennes einen Ergebniswert zurückgibt, was wir hier nicht benötigen.
2. Variablen, die wir benötigen, werden hinter dem Schlüsselwort dim deklariert, man gibt den
Namen und hinter as den Typ der Variablen an. Wir haben hier den Typ long für eine
numerische Variable mit einer gewissen Größe und mehrfach den Typ object, was ein
Sammelbegriff für sehr unterschiedliche, meist sehr komplexe Objekte ist, die eine Vielzahl
von – von Objekt zu Objekt verschiedenen – Eigenschaften besitzen. Einige Beispielesehen wir in den folgenden Befehlen.
3. ThisComponent ist ein Objekt, das standardmäßig zur Verfügung steht und im Wesentlichen das Dokument identifiziert, von dem aus das Makro gestartet wird, hier also das
Formular-Dokument Aufnahmenverwaltung mit Medienübernahme. Mit der Punktnotation
greifen wir nun auf ein Unterobjekt von ThisComponent zu, nämlich die Drawpage, die allegrafischen Objekte enthält, und davon wieder auf das Unterobjekt Forms, das alle
Formulare enthält. Sie sehen, dass man den Zugriff auf Eigenschaften oder Unterobjekteauch verschachteln kann; wenn man die Zwischenstufe nur einmal braucht, spart man sichdie Definition einer weiteren Variablen.
Das so beschriebene Objekt wird der Variablen forms zugewiesen.
4. Das Objekt forms besitzt eine Methode getByName, die aufgrund des Namens, den man
angibt, das Element (hier also das gewünschte Formular) liefert, das diesen Namen hat.
Die Schreibweise unterscheidet sich nicht grundsätzlich von der bisher verwendeten fürEigenschaften, außer dass Methoden oft einen oder mehrere Parameter haben, die dann inder Klammer angegeben werden, während Eigenschaften nie welche haben. Der Variablen
formMedium wird also das Formular „fMedium“ zugewiesen, das wir in „Neues Medium
direkt im Formular“ auf Seite 52 angelegt hatten.
5. In den folgenden drei Zeilen wird das in den Feldern des Rahmens „Neues Medium“
beschriebene Medium in die Datenbank aufgenommen (insertRow), falls es noch nicht
gespeichert ist (gesteuert durch die Frage nach isNew). Diese Aktion ist als erste nötig, da
wir ja die MedienId des Satzes in die Tabelle „Aufnahmen“ eintragen müssen, und die wird
erst beim Speichern des Datensatzes vergeben.
6. Wir ermitteln nun die MedienId über den Zugriff auf das Objekt der Spalten (Columns) des
Formulars, die Auswahl der Spalte „MedienId“ und den Zugriff auf die Eigenschaft Int (dieMedienId ist ja eine Zahl im Format Integer). Den gefundenen Wert speichern wir in der
Variablen medienId. Dass einerseits in der Methode Int, andererseits bei der Variablen longverwendet wird, ist vielleicht verwirrend, liegt aber daran, dass Basic nur eine vonmehreren verwendbaren Programmiersprachen ist und es keinen allgemein akzeptiertenStandard für die Benennung solcher Variablen gibt.
7. In den nächsten beiden Zeilen greifen wir zunächst auf das Formular mit der Tabelle der
Aufnahmen zu; Sie erinnern sich (s. Abbildung 35 auf Seite 54), dass es ein Unterformular
des Formulars „fWerke“ war, das wiederum „fKomp“ untergeordnet war. Es wird in der
Variablen formAufnahme gespeichert.
Dann wird, genauso, wie Sie es bei der Bearbeitung am Bildschirm machen müssten, indiesem Formular in die Eingabezeile für neue Datensätze gesprungen (moveToInsertRow).
8. Wir wählen nun in diesem Formular die Spalte „MedienId“ und setzen den Zahlwert(UpdateInt) aus der Variablen medienId (s. Nr. 6).
Anschließend speichern wir die neue Zeile (insertRow).
9. Wir wissen aus „Aktualisieren des Formulars“ auf Seite 50, dass wir den Inhalt der Listenfelder auffrischen müssen. Das tun wir hier – gezielt nur für die Felder, nicht für alles wie
dort – , indem wir zunächst auf das Tabellengitter (wir sind hier an der Benutzeroberfläche,nicht auf der Datenbankebene !), dann auf die betroffene Spalte zugreifen und dann den
Befehl refresh auslösen.
58

Einführung in Base

Sie sehen, dass das notwendige Vorgehen im Makro im Grunde dem entspricht, was Sie tun
müssten, wenn Sie selbst den Inhalt der MedienId vom neu erfassten Medium in das Formular für
die Aufnahmen übertragen müssten, nur macht man sich gemeinhin gar nicht so klar, was da
genau abläuft, wenn man sich z.B. den Inhalt eines Feldes merkt. (In unserem Beispiel könnten
Sie sich die Nummer der MedienId gar nicht merken, weil wir sie nicht zeigen, aber das könnten
Sie leicht ändern, indem Sie das Feld ergänzen.)
Natürlich ist das korrekte Umsetzen dessen, was man im Prinzip als Weg erkannt hat, mit den
Mitteln einer Programmiersprache wie hier Basic immer eine weitere Hürde, aber der benötigte
Sprachumfang ist nicht groß, und für die Vielzahl der verschiedenen Objekttypen und deren
wiederum große Anzahl an jeweils unterschiedlichen Eigenschaften und Methoden, die man sichsicher nicht in aller Fülle merken kann, gibt es hilfreiche Werkzeuge, die zu einem Objekt jeweils
alle verfügbaren Eigenschaften und Methoden liefern.
Sie sehen aber selbst an unserem kleinen Beispiel, dass durch Makros der Komfort einer Anwendung deutlich erhöht werden kann, daher kann eine Beschäftigung damit durchaus reizvoll sein.

Weitere Anlässe für Makros
Ein wichtiger Grund für den Einsatz von Makros ist die Behandlung von Eingabefehlern. Wenn Sie
z.B. in unserer Anwendung, wenn Sie ein Medium übernommen haben, die Taste Medium übernehmen noch einmal betätigen, ohne sonst die Auswahl irgendwie verändert zu haben, dann
bekommen Sie vom Datenbanksystem folgende Fehlermeldung (Abbildung 38):

Abbildung 38: Fehler doppelter Schlüssel
Für den Ersteller der Anwendung ist das leicht entschlüsselbar: durch das erneute Betätigen vonMedium übernehmen haben wir eine zweite Zeile mit den gleichen Werten für WerkId undMedienId erfasst und möchten sie in die Datenbank schreiben. Wir haben aber – und das unter
anderem aus diesem Grund – die Kombination dieser beiden Felder als Primärschlüssel definiert,
was bedeutet, dass diese Kombination in der Datenbank nur einmal vorkommen darf.
Ein Anwender, der die Hintergründe nicht kennt, wird aber mit einer solchen Meldung, die aus Sicht
des Datenbanksystems sicher das Beste ist, was man mit mit allgemeingültigen Aussagen liefernkann, nicht viel anfangen können. Hier wird man auf den konkreten Fall zugeschnittene Meldungenbringen müssen, und das geht nur mit Makros. Unser Beispiel ist eher für die Bedienung durcheine einzelne Person konzipiert, aber wenn Sie das Hauptbeispiel im Base-Handbuch anschauen,
eine Bibliotheksverwaltung, dann sehen Sie, dass auch bei einem gar nicht so komplizierten Fallgleich mit einigen bis ziemlich vielen Nutzern zu rechnen ist.
Aber auch sich selbst als Ersteller einer Anwendung kann man durch programmierte Fehlerprüfungen vor Flüchtigkeitsfehlern bewahren.
Die Unterstützung der Benutzer in einer Anwendung und die Behandlung von deren Fehleingaben
ist ein für die Akzeptanz der Anwendung äußerst wichtiges Thema, und dabei kommen Sie um
Makros u.ä. nicht herum.

Funktionale Erweiterungen des Formulardokuments59Externe Formulare
Sie können auch, unabhängig von einem Datenbank-Dokument, Dokumente erzeugen, die überFormulare auf eine Datenbank zugreifen. Solche Dokumente werden externe Formulare genannt.
Sie haben den Vorteil, dass der Benutzer den Zusammenhang mit der Datenbank gar nicht sieht,
also auch nicht durch die Auswahl, die das Startfenster von Base (Abbildung 3 auf Seite 14) bietet,verwirrt wird. Solche externen Formulare eignen sich also in einer Mehrbenutzer-Umgebung mit
Anwendern, die nur einen Teilaspekt der Anwendung bearbeiten und vom Rest auch ferngehalten
werden sollen.
Voraussetzung für externe Formulare ist, dass die Datenquelle angemeldet (registriert) ist, denn
LibreOffice benötigt die in der Registrierung zu findenden Informationen, um die Verbindung zu ihrherstellen zu können, im Gegensatz zum internen Formular(-Dokument), bei dem durch die vorher
erfolgte Öffnung des Datenbank-Dokuments die Verbindung bereits hergestellt wurde,

Erstellung eines externen Formulars
Für externe Formulare verwendet man bevorzugt Writer-Dokumente (wie ja auch die internen Formulare in einem Datenbank-Dokument auf einem Writer-Dokument basieren), aber das Verfahren
geht ebenso mit Calc- und Draw-Dokumenten.
Wählen Sie in einem – häufig leeren, neuen – Dokument Einfügen → Formular-Steuerelemente
und das gewünschte Steuerelement. Dadurch wird ein Formular im Dokument erzeugt, danachkönnen Sie wie in „Hinzufügen von Elementen zu einem Formular“ auf Seite 37 beschrieben Ihr
Formular-Dokument aufbauen. Weiteres finden Sie im Base-Handbuch.

Datenquellen in LibreOffice verwenden
Datenbank-Dokumente – sowohl mit internen als auch mit externen Datenbanken oder auch mit
anderen Datenquellen - können in Writer oder Calc verwendet werden, um Daten für deren
Dokumente zu liefern. Die Voraussetzung dafür ist, dass das Datenbank-Dokument angemeldet(registriert) ist. Die Anmeldung nehmen Sie üblicherweise vor, wenn Sie ein neues DatenbankDokument anlegen (s. „Schritt 2: Anmelden, Speichern“ auf Seite 12). Sie können das aber auch
später nachholen über Extras → Optionen... → LibreOffice Base → Datenbanken.

Datenquellen anzeigen und bearbeiten
Um die verfügbaren Datenquellen zu sehen, öffnen Sie ein beliebiges Dokument in Writer oder
Calc und drücken Strg+Umschalt+F4 oder wählen Ansicht → Datenquellen aus dem Menü.
Dadurch wird eine Liste der registrierten Datenquellen angezeigt.
Um eine einzelne Datenbank zu betrachten, klicken Sie auf das Plus-Zeichen links neben dem
Datenbanknamen (Abbildung 39). Dadurch werden die Einträge 'Abfragen' und 'Tabellen'angezeigt. Klicken Sie auf das Plus-Zeichen neben den Tabellen, um die einzelnen Tabellen zu
sehen, die zur Verfügung stehen. Wenn Sie jetzt auf einen Tabellennamen klicken, sehen Sie alle
Einträge, die die Datenbanktabelle enthält.

60

Einführung in Base

Abbildung 39: Datenquellen
Der rechte Teil des Datenquellenfensters entspricht exakt dem Fenster zur Bearbeitung einer
Tabelle (s. „Datenanzeige und -verwaltung in der Tabellensicht“ auf Seite 17). Tatsächlich können
Sie hier genauso wie dort die Daten verwalten, wenn die Datenquelle das Verwalten überhaupt
erlaubt.
Durch Kontextmenü → Datenbankdatei bearbeiten im linken Teil des Datenquellenfensterskönnen Sie das Datenbank-Dokument öffnen.

Daten einer Datenquelle in Writer verwenden
Serienbriefe
Das klassische Beispiel für die Verwendung von Datenquellen in Writer sind die Serienbriefe, bei
denen ein Briefmuster durch die Ersetzung von einigen Variablen aus der Datenquelle mehrfach
mit unterschiedlichem Inhalt ausgedruckt wird. Im einfachsten Fall wird da nur die Adresse
geändert und vielleicht im Text noch ein paar Mal die Anrede „Lieber Herr ...“ bzw. „Liebe Frau ...“
eingestreut. Wenn die verwendete Datenbank aber detailliertere Informationen bereitstellt, können
auch sehr individualisierte Briefe oder Dokumente erstellt werden.
Das Erstellen von Serienbriefen ist ein Thema von Writer und in der entsprechenden Dokumentation zu finden, wir stellen hier eine einfache Variante, die händische Erzeugung von mehreren
Dokumenten mit bis auf die aus der Datenquelle zu entnehmenden Inhalte identischem Text vor.
Das kann bei 5, 10 oder 15 zu erzeugenden Dokumenten durchaus Arbeit sparen und bietet vor
allem die Sicherheit, dass die Daten im Text stimmen, weil sie nicht abgeschrieben, sondern
kopiert werden.
Als Datenquelle bleiben wir bei der Datenbank DB_Klassik, dementsprechend ist der zu vervielfältigende Text eher banal, aber die Technik illustriert er genauso gut.
Das simple Beispiel soll schlichtweg Dokumente des Inhalts „<Vorname> <Nachname> lebte von<Lebensdaten>.“ erzeugen. Darin steckt aber alles Wesentliche.
Öffnen Sie dazu ein neues Writer Dokument, zeigen Sie die Datenquellen an, wählen Sie
DB_Klassik und darin Tabellen → Komponist. Schreiben Sie dann den in Abbildung 40 oben
angegebenen Text, indem Sie da, wo ein Name in spitzen Klammern steht, immer auf den Spaltenkopf klicken (s. Abbildung 39), der den entsprechenden Namen trägt, und dann mit gedrückter
Maustaste den Platzhalter an der gewünschten Stelle im Dokument einfügen. Dieser Platzhalter
wird mit spitzen Klammern umschlossen, daher wurde diese auch im Mustertext verwendet, abersie müssen wirklich das Feld aus der Datenquelle übertragen, damit die notwendigen Informationen mitgeliefert werden.
Wenn Sie den Text mit allen notwendigen Variablen eingegeben haben, können Sie das Muster mit
Daten füllen lassen. Markieren Sie dazu einen gewünschten Datensatz und wählen Sie das
Symbol Daten in Felder. Die Platzhalter im Dokument werden durch die Werte der gewählten
Datenbankzeile ersetzt. Das so erzeugte Dokument können Sie drucken oder speichern, um es
später weiterzubearbeiten.
Datenquellen in LibreOffice verwenden

61

Hier (Abbildung 40) ist das kombinierte Abbild des Zustands vor und nach der Ersetzung
abgebildet. Es wurde erzeugt, indem einfach der Text vor der Ersetzung in die Zwischenablage
kopiert wurde und nach der Ersetzung wieder vor dem veränderten Text eingefügt wurde.

Abbildung 40: Text mit Variablen vor und nach der Ersetzung
Wenn Sie nach diesem Schema ein Dokument erzeugen, die Daten jeweils eines Datensatzes
einfügen und dann drucken oder speichern, dann haben Sie die händische Form eines
Serienbriefs erzeugt. Wie Sie dies automatisieren können, was bei größerem Datenumfang
sinnvoll ist, können Sie im Writer-Handbuch nachlesen.
Wenn Sie anschließend eine andere Zeile der Datenquelle wählen und wiederum das Symbol
Daten in Felder wählen, dann werden die Felder durch die Daten des neuen Datensatzes gefüllt.

Tabellen füllen
Eine weitere Möglichkeit, die Daten einer Datenquelle im Writer-Dokument zu nutzen, besteht
darin, sie als Tabelle direkt in das Dokument einzufügen. Sie können dabei sowohl die Spalten- wie
auch die Zeilenauswahl der Datenquelle bestimmen.
1. Wählen Sie mit passender Kombination von Strg- und Umschalt-Taste und An- undAbwählen die gewünschten Zeilen der Datenquelle aus:◦

Klicken Sie auf einen Zeilenkopf der Datenquelle, also das Feld, in dem in der ersten
Zeile (vgl. Abbildung 39) das grüne Dreieck steht, um eine einzelne Zeile auszuwählen.

◦

Klicken Sie bei gedrückter Umschalt-Taste auf einen anderen Zeilenkopf, um alle Zeilen
zwischen der ersten markierten und dieser auszuwählen.

◦

Klicken Sie bei gedrückter Strg-Taste auf einen anderen Zeilenkopf, um diesen
zusätzlich auszuwählen, falls er noch nicht markiert ist, bzw. ihn aus der Auswahl
herauszunehmen, wenn er markiert war.

◦oder klicken Sie in den Tabellenkopf, das Feld über dem grünen Dreieck in Abbildung
39, um die gesamte Datenquelle auszuwählen.

2. Wählen Sie das Symbol Daten in Text
3. Wählen sie das Optionsfeld Tabelle
4. Wählen Sie im darauf erscheinenden Dialogabschnitt die anzuzeigenden Spalten durch
Doppelklick oder Auswahl und Symbol „>“ aus.
5. Sie können weiterhin bestimmen, ob Spaltenköpfe erzeugt werden sollen und wie die
Tabelle formatiert werden soll.
6. Durch Bestätigen wird eine Tabelle mit den gewählten Spalten und Zeilen in das Dokument
eingefügt, die Sie dann nach Gutdünken formatieren und bearbeiten können.
Ein Beispiel zeigt Abbildung 41, Spaltenköpfe waren erwünscht:

62

Einführung in Base

Abbildung 41: Datenquellen: erzeugte Tabelle in Writer

Weitere Möglichkeiten
Sie können nach den Schritten 1 und 2 des vorigen Abschnitts auch andere Optionen wählen:•

Felder fügt Variablen in den Text ein wie in „Serienbriefe“ auf Seite 61 beschrieben, bloß ist
es mühsamer, sie auf diesem Weg zu platzieren.

•

Text fügt den Inhalt der Spalte ein; wenn mehrere Zeilen markiert sind, werden die Inhalte
durch Absatzmarkierungen getrennt; wenn mehrere Spalten markiert sind, werden die
Inhalte hintereinander gestellt. Diese Option ist also ziemlich unflexibel (es bleibt ihr auchnichts anderes übrig) und selten ohne anschließende Bearbeitung brauchbar

Daten einer Datenquelle in Calc verwenden
Daten als Teil-Tabelle einfügen
Wenn Sie in einem Calc-Dokument die Datenquelle und die gewünschten Zeilen wie beschrieben
gewählt haben, dann haben Sie nach der Auswahl „Daten in Text“ gar keine weitere
Wahlmöglichkeit mehr; die gewählten Zeilen werden in tabellarischer Form in die Zellen desaktiven Calc-Dokuments gefüllt, ausgehend von der Cursor-Postion, wenn Sie das Symbol Daten
in Text wählen.

Externes Formular erzeugen
Wenn Sie eine Datenquelle geöffnet haben, können Sie auch auf etwas kürzerem Weg ein
externes Formular auf der Basis von Calc erzeugen. Das ist allerdings immer ein Formular, das nur
einen Satz anzeigt. Der Gewinn gegenüber dem Erzeugen, wie in „Erzeugen des Formulars mit
dem Assistenten“ auf Seite 19 beschrieben, ist nicht groß.
Im Calc-Dokument muss eine Datenquelle gewählt sein.
1. Ziehen Sie für jedes gewünschte Feld den Spaltenkopf der Datenquellenansicht mit
gedrückter Maustaste an die gewünschte Stelle im Tabellendokument.
Es wird ein Paar aus Feldname (entsprechend Spaltenkopf) und Eingabefeld eingefügt.
2. Wählen Sie dann Einfügen → Formular-Steuerelemente → Navigationsleiste, dennohne die Navigationsleiste ist später das Formular nicht brauchbar. Ziehen Sie mit derMaus den Bereich auf, der die Navigationsleiste enthalten soll.
3. Speichern Sie das Dokument unter einem passenden Namen an dem von Ihnen
gewünschten Ort.
4. Schließen Sie das Dokument
5. Wenn Sie es erneut öffnen, dann wird Ihnen der erste Datensatz angezeigt, mit den
Symbolen der Navigationsleiste können Sie durch die Datensätze navigieren.

Datenquellen in LibreOffice verwenden

63