Base Handbuch

Kapitel 1
Einführung in Base
LibreOffice 7.6

Dokumentationen zu LibreOffice unter de.libreoffice.org

Copyright
Dieses Dokument unterliegt dem Copyright © 2014. 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
Robert Großkopf

Jost Lange

Michael Niedermair

Jochen Schiffers
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 und anderer
persönlicher Daten, die die E-Mail enthält, wird öffentlich archiviert und kann nicht
gelöscht werden. Also, schreiben Sie mit Bedacht!

Datum der Veröffentlichung und Softwareversion
Veröffentlicht am 01.08.2023. Basierend auf der Version LibreOffice 7.6.

Dokumentationen zu LibreOffice unter de.libreoffice.org

Inhalt
Einführung ......................................................................................................................... 4
Base – ein Container für Datenbankinhalte .......................................................................... 6
Formulare – Start für die Dateneingabe .................................................................................................. 8
Tabellen – Grundlagen für die Dateneingabe .......................................................................................... 9
Abfragen – Auswertungsmöglichkeiten für eingegebene Daten ........................................................... 11
Berichte – Präsentationen der Datenauswertung .................................................................................. 11
Sicherer Umgang mit einer Base-Datei ................................................................................................. 14
Eine einfache Datenbank – Testbeispiel im Detail ............................................................... 14
Tabellenerstellung ................................................................................................................................. 15
Eingabeformular ................................................................................................................................... 24
Mit dem Tabulator zum Unterformular ............................................................................................. 32
Navigationsleiste des Hauptformulars auch im Unterformular aktivieren ........................................ 33
Eingabe eines Kontrollfeldes einschränken ...................................................................................... 33
Abfrage ................................................................................................................................................. 35
Ausdruck im Bericht .............................................................................................................................. 40
Abstände zwischen den Berichtsbereichen einstellen ..................................................................... 45
Beeinflussung eines Textfeldinhaltes durch eine Formel .................................................................. 45
Umstellung der Formatierung eines Textfeldes ................................................................................ 46
Verschieben von Feldern im Report-Designer .................................................................................. 46
Erweiterungen der Beispieldatenbank .................................................................................................. 47
Weiteres Einführungs- und Beispielmaterial ......................................................................................... 48

3

Einführung
Im täglichen Büroeinsatz werden häufig Tabellenkalkulationen dazu benutzt, Datensammlungenzu erstellen um anschließend damit eventuell noch kleine Berechnungen durchzuführen. Die
Tabellensicht ist sofort da, der Inhalt einfach einzugeben – da fragen sich dann viele Nutzer,
warum es denn eine Datenbank sein sollte. Dieses Handbuch versucht den Unterschied zwischen Tabellenkalkulation und Datenbank herauszuarbeiten. Zu Beginn wird erst einmal kurz
dargestellt, was eine Datenbank denn überhaupt leisten kann.

HinweisIn der Fachsprache wird statt von Datenbanken von einer Benutzeroberfläche undeinem «Datenbanksystem» gesprochen. Dieser Begriff umfasst das «Datenbankmanagementsystem» (DBMS) und den eigentlichen Datenbestand, die «Datenbank».
Base bietet einen Zugriff auf verschiedene Datenbanksysteme über eine grafische
Benutzeroberfläche. Base arbeitet standardmäßig mit dem eingebetteten Datenbanksystem «HSQLDB». Seit der Version LO 4.2 ist außerdem das Datenbanksystem «Firebird», zuerst als «experimentelle Funktion», hinzugekommen. Mit der Version LO 5.3 ist
auf die Version 3.0 des Firebird-Datenbanksystems, ebenfalls zunächst noch als «experimentelle Funktion» umgestellt worden. Ab Version LO 6.1 funktionierte «Firebird» zwischendurch versuchsweise standardmäßig. Ob und wann die interne «HSQLDB» durch«Firebird» ersetzt wird steht auch bei Erscheinen von LO 7.4 noch nicht fest, da die Integration von «Firebird» in die GUI bisher nicht die Qualität der Integration der «HSQLDB»
erreicht.
Dieses Handbuch zeigt an verschiedenen Stellen den Unterschied zwischen den beiden
internen Datenbanksystemen auf, «(HSQLDB, FIREBIRD)» würde bedeuten: Funktioniert mit
der HSQLDB, nicht aber mit Firebird. Unterschiede sind entsprechend gekennzeichnet.

Vorsicht
Wenn Extras → Optionen → LibreOffice → Erweitert → Experimentelle Funktionen aktiviert wird, dann wird ein Migrationsmodul aktiviert, das eingebettete HSQLDB-Datenbanken nach Firebird zu migrieren versucht. Dieses Modul erfordert anschließend viele
zusätzliche Eingriffe, da Funktionen in beiden Systemen teilweise nicht identisch sind.
Die Migration sollte tunlichst nicht versucht werden, bevor eine Sicherungskopie der*.odb-Datei erfolgt ist. Siehe dazu auch die Hinweise im Kapitel «Datenbank erstellen»,
im Anhang des Handbuches und auf https://wiki.documentfoundation.org/Documentation/HowTo/MigrateFromHSQLDB/de.

Das gesamte Handbuch bezieht sich in der Hauptsache auf zwei Beispieldatenbanken. Die eine
Datenbank hat die Bezeichnung «Medien_ohne_Makros.odb», die andere Datenbank ist entsprechend mit Makros erweitert worden und trägt die Bezeichnung «Medien_mit_Makros.odb».
Beide Datenbanken sollen einen Bibliotheksbetrieb ermöglichen: Medienaufnahme, Nutzeraufnahme, Medienverleih und alles, was damit verbunden ist wie z. B. das Anmahnen säumiger
EntleiherInnen.
Daneben sind den einzelnen Kapiteln viele Beispieldatenbanken 1 beigefügt, die nur auf spezielle Probleme zugeschnitten sind:1•

Beispiel_Sport.odb (Kapitel «Einführung in Base»)•

Beispiel_CSV_Einbindung.odb (Kapitel «Datenbank erstellen»)•

Beispiel_Cursorsprung_Subform_Mainform.odb (Kapitel «Formulare»)•Beispiel_Bericht_bedingte_Einblendung_von_Grafiken.odb (Kapitel «Berichte»)

Alle Beispieldatenbanken können auf http://de.libreoffice.org/get-help/documentation/ oder https://wiki.documentfoundation.org/Documentation/de#Handbuch_f.C3.BCr_Base_.28Datenbank-Programm.29 herunter geladen werden. Weitere Beispiele auch auf: https://www.familiegrosskopf.de/robert/index.php?&Inhalt=base_beispiele

Einführung4•

Beispiel_Bericht_Rechnung.odb (Kapitel «Berichte»)•

Beispiel_Bericht_Zeilen_Farbwechsel_Spalten.odb (Kapitel «Berichte»)•

Beispiel_PDFFormular_Import.odb (Kapitel «Datenbank-Anbindung»)•

Beispiel_Autotext_Suchmarkierung_Rechtschreibung.odb (Kapitel «Datenbank-Aufgaben»)•Beispiel_Formular_Eingabekontrolle.odb (Kapitel «Datenbank-Aufgaben» und «Makros»)•

Beispiel_Dokumente_einlesen_auslesen.odb (Kapitel «Datenbank-Aufgaben»)•Beispiel_Baseformular_mit_Diagramm.odb (Kapitel «Datenbank-Aufgaben»)•Beispiel_Arrayfeld.odb (Kapitel «Datenbank-Aufgaben»)•Beispiel_Listenfeld_Mehrfachauswahl.odb (Kapitel «Makros»)•

Beispiel_Suchen_und_Filtern.odb (Kapitel «Makros»)•

Beispiel_Direktberechnung_im Formular.odb (Kapitel «Makros»)•

Beispiel_Combobox_Listfeld.odb (Kapitel «Makros»)•

Beispiel_Fortlaufende_Nummer_Jahr.odb (Kapitel «Makros»)•

Beispiel_Datenbank_Serienbrief_direkt.odb (Kapitel «Makros»)•

Beispiel_Mailstart_Dateiaufruf.odb (Kapitel «Makros»)•

Beispiel_Daten_Import.odb (Kapitel «Makros»)•

Beispiel_Dialoge.odb (Kapitel «Makros»)•

Beispiel_hierarchische_Listenfelder.odb (Kapitel «Makros»)•

Beispiel_Druck_Writer_Tabellen.odb (Kapitel «Makros»)

Bis auf die Datenbank «Beispiel_CSV_Einbindung.odb» liegen alle Datenbanken sowohl
in einer Fassung für die interne HSQLDB als auch für FIREBIRD vor. Firebird kann *.csv-Dateien
nicht als Datenquelle direkt nutzen und vor allem nicht in *.csv-Dateien schreiben.
HinweisWie jede Software läuft auch LO-Base nicht vollkommen fehlerfrei. Besonders ärgerlich
sind hier die «Regressionen», also Rückschritte von einer vorhergehenden Version zur
gerade aktuellen Version. Der folgende Link führt zu den momentan noch offenen
Regressionen: https://bugs.documentfoundation.org/buglist.cgi?bug_status=UNCONFIRMED&bug_status=NEW&bug_status=REOPENED&bug_status=NEEDINFO&component=Base&keywords=regression&keywords_type=allwords&product=LibreOffice&que
ry_format=advanced&resolution=--Ein Blick auf die Bug-Liste kann also helfen, Unterschiede zwischen dieser Dokumentation und eigener Programmversion zu verstehen.

HinweisBase-Dateien sind Dateien, in denen die interne Datenbank mit abgespeichert wird.
Diese Datenbankdateien sollten immer wieder gesichert werden, damit der Datenverlust gering gehalten wird. Besonderes Augenmerk gilt hier der Migration von der internen HSQLDB zur Firebird-Datenbank. Auch sollte eine Base-Datei mit interner Datenbank immer nach Beendigung der Arbeit abgespeichert werden. Ein Zuklappen des Laptops kann sonst beim Erwachen des Systems zu Datenverlust führen.

Einführung

5

Hinweis
In diesem Handbuch werden Anführungszeichen mit unterschiedlichen Intentionen verwendet:"Tabellenname"."Feldname" > Tabellen und Felder in Datenbanken werden in doppelten
Anführungszeichen oben wieder gegeben.
'Wert' > Werte, die in die Datenbank eingegeben oder aus ihr gelesen werden, sollen in
einfachen Anführungszeichen erscheinen.
«Hervorhebungen» > Alles, was sonst hervorgehoben werden soll, erscheint in der französischen Form der Anführungszeichen.

Base – ein Container für Datenbankinhalte
Eine Base-Datei ist eigentlich nur ein gepacktes Verzeichnis, in dem Informationen für die verschiedenen Arbeitsbereiche von Base stecken. In der täglichen Nutzung startet eine Base-Datei
erst einmal mit der folgenden Ansicht:

Zur Arbeitsumgebung von Base gehören insgesamt vier Arbeitsbereiche: Tabellen, Abfragen,Formulare und Berichte. Je nach gewähltem Arbeitsbereich können bestimmte Aufgaben zur
Neuerstellung der Elemente in Angriff genommen oder fertiggestellte Elemente aufgerufen
werden.
In den Arbeitsbereichen Formulare und Berichte können die jeweiligen Elemente auch innerhalb einer Verzeichnisstruktur angeordnet werden:

Base – ein Container für Datenbankinhalte

6Dies geht entweder direkt beim Abspeichern über den Speicherdialog oder durch Neugründung
von Verzeichnissen über Einfügen → Ordner. Wird ein Formular über den Assistenten erstellt, so
steht der Speicherort in dem Ordner leider nicht zur Verfügung. Hier müsste dann das Formularanschließend in den Unterordner verschoben werden.
Obwohl die Basis für eine Datenbank durch Tabellen gebildet wird, startet Base mit der Formularansicht, weil Formulare in der Regel die Elemente sind, mit denen die tägliche Datenbankarbeit vonstatten geht. Über die Formulare werden Einträge in die Tabellen vorgenommen undInhalte aus den Tabellen ausgewertet.

Base – ein Container für Datenbankinhalte7Formulare – Start für die Dateneingabe

Einfache Formulare bilden lediglich eine Tabelle wie im oben sichtbaren Tabellenkontrollfeld mit
den Namen ab. Dieses Formular erfüllt durch seine Struktur einige zusätzliche Punkte.
•

Die Auswahl der Personen kann mit Filtern eingeschränkt werden. Die einfache Eingabe
des Buchstaben 'G' erzeugt eine Auswahl aller Personen, deren Nachname mit 'G'
beginnt.

•

Neue Mediennutzer können direkt in das Tabellenkontrollfeld eingegeben werden.

•

Die Ausleihdaten des aktuell markierten Nutzers werden in den darunterliegenden Feldern angezeigt. Dabei wird auch noch einmal der Name des Nutzers deutlich hervorgehoben. Hat ein Nutzer ein Buch entliehen und müsste es bereits zurückgegeben werden,
so steht das Tabellenkontrollfeld «aktuelle Ausleihe» erst einmal nicht zur Verfügung.
Stattdessen wird angegeben, dass die Ausleihe zur Zeit gesperrt ist.

•

Das Entleihdatum wird mit dem aktuellen Datum vorgegeben. In dem daneben stehenden Listenfeld werden die zu entleihenden Medien ausgewählt. Dabei können keine
Medien ausgewählt werden, die zur Zeit noch entliehen sind.

Base – ein Container für Datenbankinhalte8•Die ausgewählten Daten werden mit dem Button Aktualisieren in das Tabellenkontrollfeld für den aktuellen Ausleihvorgang übernommen.

•

Im Tabellenkontrollfeld für die Rückgabe ist es nicht möglich, einen Datensatz einfach zu
löschen. Nur die Felder «Rück-Datum» und «Verlängerung» können bearbeitet werden.
War ein Mediennutzer vorübergehend gesperrt und hat seine entliehenen Medien
zurückgegeben, so lässt sich die Ausleihe über den Button Aktualisieren wieder freischalten.

Alle diese Funktionen können ohne den Einsatz von zusätzlicher Programmierung mit Makros
gewährleistet werden, wenn entsprechend an den Formularen gefeilt wird.

Tabellen – Grundlagen für die Dateneingabe
Die Tabellen in einer Datenbank hängen in einem großen Geflecht zusammen. Eine Tabelle
bezieht Informationen aus einer anderen oder gibt Informationen an andere Tabellen weiter.
Dies wird als «Relation» bezeichnet.
Die Tabelle "Ausleihe" steht in direkter Beziehung zu den Tabellen "Medien" und "Leser".

Statt in der Ausleihe den Titel eines Buches abzuspeichern, wird dort nur eine Zahl abgespeichert. Das eindeutige Kennzeichen eines Datensatzes der Tabelle "Medien" ist in dem Feld "ID"gespeichert. Das Feld ist das Schlüsselfeld der Tabelle "Medien", der Primärschlüssel.
In der Tabelle "Ausleihe" wird auch nicht jedes Mal der Lesername eingetragen. Hier gibt die
Tabelle "Leser" Auskunft. Auch sie hat ein Primärschlüsselfeld. Der Wert dieses Feldes kanndann in die Tabelle "Ausleihe" eingetragen werden.
Die Beziehungen zwischen den Tabellen haben hier den Vorteil, dass die Schreibarbeit im Formular erheblich reduziert wird. Statt bei jeder Ausleihe ein Medium zumindest unverwechselbar
und für jeden erkennbar aufzuschreiben und Leser mit Vor- und Nachnamen zu notieren, wird
einfach im Inhalt der anderen Tabellen nachgesehen. Schließlich wird dasselbe Medium später
noch öfter ausgeliehen und derselbe Leser kann schon beim ersten Entleihvorgang mehrere
Medien entleihen.
Relationen helfen auch, Fehler durch unterschiedliche Schreibweisen z.B. von Lesernamen zu
vermeiden.

Base – ein Container für Datenbankinhalte

9Die Tabellengrundlage für das oben vorgestellte Formular sieht erst einmal recht nüchtern aus.
In der oben abgebildeten Tabelle werden bis auf die Nutzerneueingabe alle Eingaben gemacht,
die in dem Formular möglich sind. Dabei werden im Formular die Verbindungen dieser Tabelle
zu den anderen Tabellen der Datenbank genutzt.
•

Das erste Feld zeigt den für die meisten Datenbanken unabdingbaren, unverwechselbaren Inhalt, den Primärschlüssel ("ID"), der automatisch geschrieben wird.
Mehr dazu im Kapitel «Beziehungen zwischen Tabellen allgemein».

•

Das zweite Feld "Medien_ID" speichert den Primärschlüssel der Tabelle "Medien". Es verweist über die Nummer auf den entsprechenden Inhalt in dieser Tabelle. Solch ein Verweis auf einen Primärschlüssel wird als Fremdschlüssel bezeichnet. Im Formular werden
statt des Fremdschlüssels über ein Listenfeld der Titel und der Verfasser angezeigt. Das
Listenfeld gibt im Hintergrund den Fremdschlüssel an die Tabelle weiter.

•

Das dritte Feld "Leser_ID" speichert den Primärschlüssel der Tabelle "Leser", also nur
eine Nummer, die auf den Leser verweist. Im Formular wird aber der Nachname und derVorname angegeben. Wie in der Tabelle zu sehen ist, hat der Leser mit der Primärschlüsselnummer '0' sehr viele Medien entliehen. Die Tabelle kann beliebig oft den einzigartigen Primärschlüssel der Tabelle "Leser" als Fremdschlüssel "Leser_ID" abspeichern. Auf
keinen Fall darf aber ein Leser, der in dieser Tabelle über den Fremdschlüssel verzeichnet ist, gelöscht werden. Sonst wäre nicht mehr nachvollziehbar, wer denn nun das
jeweilige Medium entliehen hat. Die Datenbank macht in den Standardeinstellungen so
ein Löschen unmöglich. Der Fachbegriff dafür ist die Gewährung der «referentiellen Integrität».

•

Im vierten Feld wird das Ausleihdatum abgespeichert. Ist dieses Datum abgespeichert
und entspricht das Datum nicht dem aktuellen Datum, so erscheint der entsprechende
Datensatz zu dem entsprechenden Leser im Formular im untersten Tabellenkontrollfeld
zu Rückgabe der Medien.

Base – ein Container für Datenbankinhalte10•Im letzten Feld wird eine Verlängerung ermöglicht. Was hier eine 1, 2 usw. bedeutet wird
an anderer Stelle festgelegt. Dafür enthält die Datenbank eine gesonderte Tabelle mit
der Bezeichnung "Einstellungen".

Diese Eingaben reichen aus, um letztlich einen Bibliotheksbetrieb in Gang zu halten.

Abfragen – Auswertungsmöglichkeiten für eingegebene Daten
Abfragen zeigen eine Sicht auf die Tabellen. Sie bringen Inhalte mehrerer Tabellen zusammen in
einer Übersicht. Abfragen werden nur in der Abfragesprache «SQL» gespeichert. Sie sind alsokeine neuen Tabellen, auch wenn sie von der Ansicht her in Base erst einmal gleich erscheinen.

Diese Abfrage listet alle Medien auf, die zur Zeit entliehen sind. Darüber hinaus berechnet sie,
wie lange die Medien bereits entliehen sind und wie lange sie noch entliehen werden dürfen.
Während das Feld "Medien_ID" das Fremdschlüsselfeld ausliest, wird in dem Feld "Medium" ausdem Primärschlüssel, dem Titel und dem Autor des Mediums ein zusammenhängender Text
gebildet. Dieses Feld wird dann im Formular unter dem Untertitel «Rückgabe» benötigt. Einige
Felder der Abfrage dienen dabei als Verbindungsfelder zu dem eigentlichen Ausleihformular mit
der Tabelle "Ausleihe", nämlich die Felder "Medien_ID" und "Leser_ID".
•

Alle Medien, bei denen das Rückgabedatum in der Tabelle "Ausleihe" nicht ausgefüllt ist,
werden aufgelistet. Die Medien sind hier als zusätzliche Übersicht auch noch entsprechend benannt.

•

Der Bezug zu den Lesern ist hergestellt über den Primärschlüssel der Tabelle "Leser"•

Aus dem Ausleihdatum "Leih_Datum" und dem aktuellen Datum wird die Zeitdifferenz in
Tagen als "Leihzeit" angegeben.

•

Von der Ausleihzeit, die je nach Medienart unterschiedlich sein kann, wird die Leihzeit
abgezogen. Daraus wird die verbleibende Restzeit gebildet.

•

Bei einer Verlängerung wurde in der Tabelle "Einstellungen" vermerkt, dass der Wert '1'
für eine Verlängerung von 7 Tagen steht. Im vorletzten Datensatz mit der "Medien_ID"'2' ist so eine Verlängerung bei der Restzeit berücksichtigt worden.

Berichte – Präsentationen der DatenauswertungÜber Berichte werden die Daten so aufbereitet, dass sie sinnvoll ausgedruckt werden können.
Formulare wie das folgende sind nicht dazu geeignet, z. B. einen sauber formatierten Brief auszugeben.

Base – ein Container für Datenbankinhalte

11

Bevor ein aktueller Bericht in Form einer Mahnung ausgedruckt werden kann, müssen in diesem Formular erst einmal die Mahnungen bestätigt werden. Im oberen Tabellenkontrollfeld stehen dafür alle Namen der Leser, die ein Medium entliehen haben und für die eine negative
Restzeit vermerkt ist.
Für jedes anzumahnende Buch wird im unteren Tabellenkontrollfeld ein Mahndatum festgelegt.
Dies dürfte bei der Abarbeitung von Mahnungen das aktuelle Datum sein. Die Mahnungsnummer wird nicht extra geschrieben. Sie wird anhand der bisher ergangenen Mahnungen einfach
durch Addition ermittelt.
Dieses Formular benötigt in der Fassung ohne Makros noch eine Eingabe durch den Nutzer. In
der Fassung, die mit Makros arbeitet, wird einfach das Datum automatisch geschrieben undanschließend der Bericht zum Mahnungsdruck aufgerufen.

Base – ein Container für Datenbankinhalte

12Mit Hilfe einer Abfrage lässt sich aus den getätigten Eingaben solch eine Mahnung zum Ausdruck fertig erstellen. Der Nutzer der Datenbank braucht dazu lediglich bei den Berichten den
Bericht Mahnung auszuwählen und kann dann einen entsprechenden Mahnbrief an alle die Personen schicken, bei denen im vorher angegebenen Formular eine Mahnung bearbeitet wurde.
In so einem Bericht stehen also gegebenenfalls auf den folgenden Seiten jeweils auf einer Seite
weitere Mahnungen für andere Personen. Sollte ein Leser so viele Medien entliehen haben, dass
der Platz auf einer Seite nicht ausreicht, so wird die Tabelle auf der Folgeseite einfach fortgesetzt.
Ein so erstellter Bericht ist also umfangreicher als ein Serienbrief, der mit Writer erstellt wird: erstellt automatisch alle Datensätze zusammen, die gedruckt werden sollen und ordnet den
zusätzlichen Text entsprechend an.
Ein ähnlicher Brief wie in der obigen Abbildung lässt sich sonst nur unter Zuhilfenahme von
Makros realisieren, wie es in «Drucken über Textfelder» beschrieben wird.

Base – ein Container für Datenbankinhalte

13Sicherer Umgang mit einer Base-Datei
Tabellen der internen Datenbank, Abfragen, Formulare und Berichte werden in einer Base-Datei
gespeichert. Durch diese Vielzahl an Elementen, von denen z.B. die Datenbank auch noch während der Arbeit in den Arbeitsspeicher ausgelagert wird, ist solch eine Datei ein Element, mit
dem sorgsam umzugehen ist. Manchmal sind Bugmeldungen zu lesen, die vor diesem Hintergrund deutlich machen, dass eine Datenbankdatei eben einen etwas sorgfältigeren Umgang
benötigt als z.B. eine Textdatei, die mit dem Writer geschrieben wird.
Die folgenden Hinweise sollten deshalb beim Umgang mit einer Base-Datei berücksichtigt werden:•

Eine geöffnete Datenbankdatei sollte möglichst nicht über Speichern unter mit einem
anderen Namen abgespeichert werden. Wenn es schon nicht anders geht, so sollten
Tabellen, Abfragen, Formulare und Berichte vorher geschlossen werden. Besser ist es,
die Datenbankdatei zu schließen und eine Kopie der Datei zu erstellen.
Der Report-Designer ist ein Addon. Er wird zwar inzwischen nicht mehr als gesonderte
Erweiterung sichtbar, arbeitet aber weitgehend unabhängig von der Datenbankdatei.
Das Umbenennen der Datenbankdatei über Speichern unter entzieht dem Report-Designer seine Grundlage.

•

Die Abspeicherung einer Tabelle, einer Abfrage, eines Formulars oder eines Berichtes
hat nicht zur Folge, dass die komplette Datenbankdatei abgespeichert wird. Diese
Abspeicherung muss separat erfolgen. Nach wichtigen Schritten bei der Erstellung vonElementen für die *.odb-Datei muss deshalb immer das Element und anschließend die
Datenbankdatei gespeichert werden.
Besonders trifft dieses Speicherverhalten auf die Arbeit mit dem Report-Designer zu. Die
Erstellung eines Berichtes ist noch die labilste Komponente innerhalb der Base-Datei.
Deshalb nach jedem Schritt Bericht und *.odb-Datei sichern. Ist der Bericht erstellt, so
funktionieren die Berichte selbst ohne besondere Probleme.

•Eine einmal fertig gestellte *.odb-Datei, die anschließend nur noch mit Daten gefüttert
wird, wird nicht wieder über den Speicherbutton abgespeichert. Die Speicherung derDatensätze erfolgt letztlich beim Schließen der *.odb-Datei. Der Inhalt der Datenbank
wird erst dann zurück in die Datei geschrieben. Ein Absturz an dieser Stelle kann zu
Datenverlust führen. Deshalb sollte eine Strategie entwickelt werden, wie Sicherungskopien rechtzeitig erstellt werden. Im Kapitel «Makros» befindet sich ein Makro, mit dem
solch eine Sicherungskopie beim Öffnen einer Datenbankdatei automatisch erstellt wird.
Ebenso ist dort eine Möglichkeit aufgeführt, wie auch zwischendurch gesichert werdenkann.
Einem deutlich höheren Sicherheitsstandard genügen schließlich externe Serverdatenbanken wie MySQL/MariaDB oder PostgreSQL. Für diese könnte dann Base als Frontend
mit Abfragen, Formularen und Berichten dienen.

Vorsicht
Für FIREBIRD vorläufig noch: Daten werden nicht automatisch gespeichert. Das Speichersymbol in Tabellen zeigt zwar eine Speicherung beim Datensatzwechsel an. Diese Speicherung muss aber noch im Hauptfenster der Base-Datei bestätigt werden. Ohne diese
Speicherung gehen alle neu eingegebenen Daten verloren.

Eine einfache Datenbank – Testbeispiel im Detail
Die Erstellung einer Datenbank wird in «Neue Datenbank als interne Datenbank» abgehandelt.
Dort werden neben der internen HSQLDB oder der internen Firebird-Datenbank verschiedene
andere Datenbanksysteme eingebunden.

Eine einfache Datenbank – Testbeispiel im Detail

14Das folgende Beispiel basiert auf der Standarddatenbank HSQLDB, die mit LibreOffice alsinterne Datenbank installiert wird. Unterschiede zur internen Firebird-Datenbank werden an
entsprechender Stelle gesondert gekennzeichnet.
Es wird zuerst eine neue Datenbank als interne Datenbank erstellt, die nicht angemeldet wird.
Erstes Kennzeichen bei der Erstellung einer Datenbank ist, dass zum Abschluss des Assistenten
zuerst einmal ein Speicherort gesucht wird und die Datei abgespeichert wird.
Die Datenbank soll dazu dienen, einen Sportwettkampf in verschiedenen Disziplinen zu organisieren. Als Bezeichnung wurde deshalb «Beispiel_Sport»2 gewählt.

Tabellenerstellung
Sobald die Abspeicherung erfolgt ist, erscheint der Startbildschirm der Benutzeroberfläche für
die Datenbank. Standardmäßig sind zuerst auf der linken Seite im Bereich Datenbank → Tabellen ausgewählt. Die Tabellen sind das zentrale Speicherelement für die Daten. Ohne Tabellenkeine Datenbank.

Tabellen → Aufgaben → Tabelle in der Entwurfsansicht erstellen … wird angeklickt. Es öffnet
sich der folgende Bildschirm:

2

Die Datenbank «Beispiel_Sport.odb» ist den Beispieldatenbanken für dieses Handbuch beigefügt.

Eine einfache Datenbank – Testbeispiel im Detail15

Hier werden zuerst einmal die verschiedenen Feldnamen für die erste Tabelle eingetragen. Die
Tabelle soll die Teilnehmer und Teilnehmerinnen enthalten. Sie ist hier erst einmal auf diewesentlichen Bestandteile reduziert.
Die Feldnamen "Vorname", "Nachname" und "Geburtstag" dürften klar sein. Zusätzlich wurde
ein Feld mit der Bezeichnung "ID" eingetragen. Dieses Feld soll später einen Wert aufnehmen,der die einzigartige Eigenschaft eines jeden Datensatzes ist. So ein einzigartiges Schlüsselfeld
ist für die eingebettete Datenbank notwendig. Ansonsten lassen sich keine Datensätze in die
Tabelle eingeben. Dieses Schlüsselfeld wird bei Datenbanken als «Primärschlüssel» bezeichnet.
Es könnte natürlich auch ein anderes Feld für diese Eigenschaft genutzt werden. Wird aber z. B.
der "Nachname" alleine dafür genutzt, so können nicht zwei Personen mit gleichem Nachnamen abgespeichert werden. In diesem Fall könnte es helfen, zwei Felder zusammen zu einem
gemeinsamen Primärschlüssel zu erklären. Eine Garantie, dass das auf Dauer funktioniert, ist
das aber nicht. Deshalb wird hier die einfachere Variante bevorzugt.

Eine einfache Datenbank – Testbeispiel im Detail16

Im zweiten Arbeitsgang werden jetzt die Feldtypen für die bereits benannten Felder aus derListe ausgewählt. Das Feld "ID" wird auf den Feldtyp → Integer eingestellt. Es wird dann Ganzzahlen speichern. Dieser Feldtyp hat den Vorteil, dass er bei der eingebetteten Datenbank
automatisch mit der nächst höheren Ganzzahl versehen werden kann.

Die Feldeigenschaft des Feldes "ID" wird bearbeitet. Für dieses Feld wird die automatische Einsetzung von aufsteigenden Zahlenwerten aktiviert: Feldeigenschaften → Auto-Wert → Ja.

Durch die Einstellung des Auto-Wertes sollte beim Verlassen der Feldtypenauswahl auf dem
Zeilenkopf ein Schlüsselsymbol zu sehen sein. Das zeigt an, dass dieses Feld den Primärschlüssel der Tabelle bildet. Wird nicht der Auto-Wert gewählt, so kann der Primärschlüssel auch überdas Kontextmenü der Maus (rechte Maustaste → Primärschlüssel) ausgewählt werden.
Für den Geburtstag ist noch der Feldtyp → Datum einzustellen. Dadurch wird gewährleistet,dass nur gültige Datumseingaben aufgenommen werden und außerdem mit Hilfe des Datums
Sortierungen durchgeführt oder z. B. das Alter berechnet werden kann.
Welche Felder müssen auf jeden Fall einen Inhalt haben? Diese Tabelle macht ohne Inhalt im
Feld "Nachname" und "Datum" keinen Sinn. Schließlich soll die Person erkannt werden undeiner Altersklasse zugeordnet werden können. Bei "Nachname" und "Datum" sollte also Feldeigenschaften → Eingabe erforderlich → Ja gewählt werden.

Eine einfache Datenbank – Testbeispiel im Detail17Die Tabelle wird nun unter dem Namen "Teilnehmer" abgespeichert. Anschließend können
Daten eingegeben werden. Im Feld "ID" ist die Eingabe nicht nötig. Sie wird automatisch beim
Abspeichern des Datensatzes erledigt.

Tipp
Bei der intensiveren Nutzung von Base vor allem mit Makros kann es zu Verwechselungen von Tabellenbezeichnungen, Abfragebezeichnungen, Formularbezeichnungen und
Berichtsbezeichnungen führen. Um hier eine deutlichere Unterscheidung zu ermöglichen, werden häufig Kürzel vor die Namensbezeichnungen gesetzt:
tbl_Name > Tabellenbezeichnung («tbl» steht für «table»)
viw_Name > Ansichtsbezeichnung («viw» steht für «view»)
qry_Name > Abfragebezeichnung («qry» steht für «query»)frm_Name > Formularbezeichnung («frm» steht für «form»)
rpt_Name > Berichtsbezeichnung («rpt» steht für «report»)
Die für dieses Handbuch erstellten Beispieldatenbanken folgen dieser Namensgebung
nicht. Eine entsprechende Benennung wäre bei umfangreichen Datenbanken vonAnfang an sinnvoll. Die umfangreichsten Datenbanken dieses Handbuches sind aberbereits entstanden, bevor dieser Vorschlag zur Benennung auftauchte.

HinweisDie Datenbankdatei ist ein gepacktes Verzeichnis von einzelnen Dateien. Das Speicherneines einzelnen Elementes wie der Tabelle wird deshalb nicht direkt in die Datenbankdatei selbst geschrieben. Deswegen muss nach der Erstellung von Tabellen, Abfragen, Formularen und Berichten anschließend auch der Speicherbutton für die Datenbankdatei
selbst betätigt werden.
Einzig das Abspeichern von eingegebenen Daten funktioniert beim Verlassen der Datenzeile automatisch.

Die Teilnehmer können jetzt eingegeben werden. Folgende Informationen fehlen allerdings auf
den ersten Blick:•

Eine Liste der Sportarten, die die Teilnehmer belegen wollen.

•

Für Wettkämpfe die Unterscheidung von Teilnehmern und Teilnehmerinnen.

Es wird eine Tabelle "Sportarten" erstellt. Da nicht so sehr viele unterschiedliche Sportarten in
Frage kommen, wird hier nicht der automatisch hoch zählende Primärschlüssel gewählt. Stattdessen wird der Feldtyp → Text belassen, aber auf 5 Zeichen begrenzt. Die 5 Zeichen reichen
aus, um damit auch passende Kürzel für die Sportarten zu finden.

Eine einfache Datenbank – Testbeispiel im Detail18Der Feldtyp «Text» hat den Vorteil, dass schon bei einem Blick auf den Primärschlüssel "ID" klar
wird, um welche (ausgeschriebene) "Sportart" es sich handelt. Das Feld "Sportart" wird überFeldeigenschaften → Eingabe erforderlich → Ja zum Pflichtfeld erklärt.
Anschließend kann diese Tabelle zur Eingabe von Daten geöffnet werden (Doppelklick auf die
Tabelle oder rechter Mausklick → Öffnen).

So könnte dann der Inhalt der Tabelle nach der Eingabe von Daten aussehen. Ohne Daten indieser Tabelle stehen nachher in dem Formular keine Sportarten zur Auswahl.

Die Tabelle "Teilnehmer" soll noch einmal zum Bearbeiten, nicht zur Dateneingabe, geöffnet
werden. Dies geschieht über das Kontextmenü der Tabelle.

Eine einfache Datenbank – Testbeispiel im Detail19Der Tabelle wird das Feld "Geschlecht" hinzugefügt. Ein neues Feld kann mit der grafischen
Benutzeroberfläche nur am Ende der Tabelle hinzugefügt werden. Über SQL ist auch die Möglichkeit gegeben, neue Felder an einer bestimmten Position einzufügen.
Die Länge des Textes in diesem Feld beschränkt sich auf einen Buchstaben. Es reicht also 'm'
und 'w', ggf. auch 'd' als Eingabe.
Auch diese Eingabe ist notwendig, damit bei den Wettbewerben nach dem Geschlecht unterschieden werden kann. Mit Feldeigenschaften → Eingabe erforderlich → Ja soll das abgesichert
werden.

HinweisDie nachträgliche Einstellung eines Feldes auf Eingabe erforderlich → Ja setzt voraus,
dass entweder noch keine Daten in der Tabelle sind oder alle Datensätze für das entsprechende Feld mit einer Eingabe versehen sind. Gegebenenfalls müssen also zuerst
sämtliche Datensätze aus "Teilnehmer" mit einem Eintrag bei "Geschlecht" versehen
werden.

Irgendwie müssen die beiden Tabellen verbunden werden, so dass jedem Teilnehmer mehrere
Sportarten und jeder Sportart mehrere Teilnehmer zugeordnet werden können. Diesgeschieht durch eine Tabelle, in der die Werte der beiden Primärschlüssel der Tabellen "Teilnehmer" und "Sportart" abgespeichert werden sollen. Da nicht mehr als die Kombination dieser Felder gespeichert werden soll, sind beide Felder zusammen der Primärschlüssel für diese Tabelle.
Um beiden Feldern einen Primärschlüssel zuzuweisen, wird zunächst am Zeilenkopf eine Zeile
markiert, danach die Großschreibtaste ( Umschalt oder Shift ) betätigt und die zweite Zeile

Eine einfache Datenbank – Testbeispiel im Detail20

zusätzlich markiert. Über das Kontextmenü der Maus lässt sich, wenn die Taste Umschalt losgelassen wurde, jetzt der Primärschlüssel festlegen.
Damit wirklich die entsprechenden Werte aus "Teilnehmer" und "Sportart" aufgenommen werden können, müssen die Felder genau dem Feldtyp entsprechen, den sie speichern sollen.
"ID_Teilnehmer" muss also den Feldtyp «Integer» haben. "ID_Sportart" muss den Feldtyp «Text»
haben und außerdem, wie das Feld "ID" aus der Tabelle "Sportart", auf 5 Zeichen begrenzt werden.
Die Tabelle wird unter dem Namen "rel_Teilnehmer_Sportart" abgespeichert.

Tipp
In diese Verbindungstabelle würden auch z.B. die Ergebnisse eines Wettkampfes gehören. Sollen allerdings mehrere Wettkämpfe abgehalten werden, so ist zusätzlich ein
Wettkampfdatum in den gemeinsamen Primärschlüssel mit aufzunehmen.

Sind die Tabellen fertiggestellt, so sollte eine entsprechende Verbindung der Tabellen fest definiert werden. So kann verhindert werden, dass in der Tabelle "rel_Teilnehmer_Sportart" z. B.
eine Nummer für einen Teilnehmer auftaucht, die gar nicht in der Tabelle "Teilnehmer" verzeichnet ist.

Über Extras → Beziehungen wird das Fenster für die Beziehungsdefinition geöffnet.

Eine einfache Datenbank – Testbeispiel im Detail

21

Für die Beziehungsdefinition sind alle bisher erstellten Tabellen notwendig. Die einzelnen Tabellen werden markiert und über Hinzufügen in den Beziehungsentwurf aufgenommen. Anschließend wird der Dialog «Tabellen hinzufügen» geschlossen.

Bei den hinzugefügten Tabellen sind alle Felder aufgeführt. Die Primärschlüsselfelder sindzusätzlich mit einem Schlüsselsymbol gekennzeichnet. Die vorgesehenen Rechtecke für die
Tabellen können übrigens beliebig verschoben und in der Größe verändert werden.

Eine einfache Datenbank – Testbeispiel im Detail22

Das Feld "Teilnehmer"."ID" wird mit der linken Maustaste markiert. Die Maustaste wird gehalten
und die Maus auf das Feld "rel_Teilnehmer_Sportart"."ID_Teilnehmer" gezogen. Der Cursor zeigt
eine Verknüpfung an. Die Maustaste wird über dem Feld "rel_Teilnehmer_Sportart"."ID_Teilnehmer" los gelassen. Es erscheint der folgende Dialog zur Definition der Beziehung («Relation»).

Das Feld "rel_Teilnehmer_Sportart"."ID_Teilnehmer" soll nicht verändert werden, wenn "Teilnehmer"."ID" verändert würde. Das ist die Standardeinstellung. "Teilnehmer"."ID" wird sowieso
nicht verändert, da es sich um ein automatisch hoch zählendes Feld handelt und dort kein Eingriff vorgenommen werden soll.
Der Datensatz der Tabelle "rel_Teilnehmer_Sportart" soll gelöscht werden, wenn "ID_Teilnehmer" gleich "Teilnehmer"."ID" ist und "Teilnehmer"."ID" gelöscht wird. Wenn also aus der Teilnehmer-Tabelle ein Teilnehmer entfernt wird, dann werden alle entsprechenden Datensätze aus
der Tabelle "rel_Teilnehmer_Sportart" entfernt. Dieses Vorgehen wird als «kaskadierendes
Löschen» bezeichnet.

Im nächsten Schritt werden "rel_Teilnehmer_Sportart"."ID_Sportart" und "Sportart"."ID" durch
Ziehen der Maus bei gedrückter linker Maustaste verbunden. Auch hier soll ein Datensatz
gelöscht werden, wenn die entsprechende Sportart gelöscht wird.
Eine einfache Datenbank – Testbeispiel im Detail23

Für die Datenänderung bei "Sportart"."ID" ist allerdings eine andere Variante gewählt worden.
Wird "Sportart"."ID" geändert, so wird entsprechend "rel_Teilnehmer_Sportart"."ID_Sportart"
angepasst. So kann gegebenenfalls das Kürzel von maximal 5 Zeichen für eine Sportart problemlos angepasst werden, auch wenn bereits viele Datensätze in der Tabelle"rel_Teilnehmer_Sportart" stehen. Dieser Vorgang wird als «kaskadierendes Update» bezeichnet.

Die Felder sind nun fertig verbunden. An den Enden der Verbindungen erscheint jeweils eine«1» und ein «n». Ein Teilnehmer kann mehrmals in der Tabelle "rel_Teilnehmer_Sportart" auftauchen. Eine Sportart kann ebenfalls mehrmals in der Tabelle "rel_Teilnehmer_Sportart" auftauchen. Nur die Kombination von Teilnehmer und Sportart gibt es in der Tabelle nur maximal ein
Mal. Aus zwei 1:n-Beziehungen wird so über die dazwischen gesetzte Tabelle"rel_Teilnehmer_Sportart" eine n:m-Beziehung.
Solch eine Tabellenkonstruktion lässt sich nur schlecht über die Eingabe in Tabellen mit Inhalt
füllen. Es müssten alle 3 Tabellen geöffnet sein, wenn einem Teilnehmer eine Sportart zugewiesen werden soll. In der Tabelle "Teilnehmer" muss "Teilnehmer"."ID" gesucht werden und nach"rel_Teilnehmer_Sportart" übertragen werden. In der Tabelle "Sportart" muss "Sportart"."ID"gesucht und entsprechend in "rel_Teilnehmer_Sportart" eingetragen werden. Zu umständlich:
Ein Formular löst das eleganter.

Eingabeformular
Formulare können direkt in der Entwurfsansicht oder mit Hilfe des Assistenten erstellt werden.
Die Erstellung mit dem Assistenten greift dabei auch alten Hasen so gut unter die Arme, dassdiese eben schnell den Assistenten durchlaufen lassen und anschließend ein erst einmal vom
Grund her erstelltes Formular ihren Wünschen anpassen. Das ist häufig der deutlich zeitsparendere Weg.

Eine einfache Datenbank – Testbeispiel im Detail24

Zuerst wird unter Datenbank der Arbeitsbereich für Formulare gewählt. Dann wird unter Aufgaben → Formular unter Verwendung des Assistenten erstellen … ausgeführt.

In der Hauptsache sollen in die Tabelle "Teilnehmer" Daten eingegeben werden. Die Tabelle"Sportarten" wird direkt mit den wenigen notwendigen Sportarten bestückt und nur selten
ergänzt.
Von der Tabelle "Teilnehmer" werden alle Felder bis auf das Primärschlüsselfeld "ID" benötigt.
Das Primärschlüsselfeld wird ja automatisch mit einem entsprechend unverwechselbarem Wert
gefüllt.
Die Felder im Formular werden über die Pfeiltasten zwischen den beiden Auswahlkästchen
bestückt.

Hinweis
FIREBIRD erkennt zur Zeit noch nicht die in den Beziehungen erstellten Tabellenverknüpfungen. Für Firebird muss deshalb darauf geachtet werden, dass auch das Feld "ID" indas Formular übernommen wird. Die Verknüpfungen zum folgenden Unterformular werden nicht automatisch erkannt. Auch für die dort auszusuchende Tabelle müssen zuerst
einmal alle Felder übernommen werden.

Eine einfache Datenbank – Testbeispiel im Detail25

Es soll ein Unterformular eingerichtet werden, in dem die Sportarten dem Teilnehmer zugewiesen werden können. Die Beziehung für das Unterformular wird aus der vorher definierten Beziehung ausgelesen. Allerdings muss sie hier noch durch einen Klick auf die Tabelle "rel_Teilnehmer_Sportart" bestätigt werden.

Aus der Tabelle "rel_Teilnehmer_Sportart" wird nur das Feld "ID_Sportart" benötigt. Das Feld
"ID_Teilnehmer" wird über die Verbindung von Hauptformular zu Unterformular mit dem Wert
versehen, der in der Teilnehmer-Tabelle für den Primärschlüssel des aktuellen Datensatzes
steht.
Dass diese Verknüpfung bereits geregelt ist, ist auch an dem 4. Schritt des Assistenten zu
erkennen: Der Schritt Verknüpfte Felder ist inaktiv.

Eine einfache Datenbank – Testbeispiel im Detail26

Wie die Elemente im Hauptformular und wie im Unterformular angeordnet sind, ist letztlichegal. Damit aber die Zuordnung von Daten auch für ungeübte einfach zu ersehen ist, sollte fürdas Hauptformular in unserem Beispiel nicht das Tabellenkontrollfeld gewählt werden. Im Unterformular soll das Feld später alle Sportarten des Teilnehmers anzeigen. Deswegen an dieser
Stelle am besten das Tabellenkontrollfeld belassen.
Schritt 6 sollte so bleiben, wie er vorgesehen ist, also Dateneingabe → Das Formular zeigt existierende Daten an. Damit ist dann eine Neueingabe ebenso möglich wie eine Veränderung
bereits bestehender Daten.
Schritt 7 ist reine Geschmackssache. Nur Vorsicht: manche Stile bergen unverhoffte kontrastarme Darstellungen vor allem in Tabellenkontrollfeldern. Hier muss dann gegebenenfalls die
Schriftfarbe der Tabellenkontrollfelder nachjustiert werden.

Mit dem Formular soll noch nicht gearbeitet werde, weil das Unterformular noch die Eingabe
des Kürzels für die Sportarten erfordert. Hier wäre eine Auswahl der Sportarten nach dem kompletten Namen wünschenswert. Deswegen: Das Formular weiter verändern.

Eine einfache Datenbank – Testbeispiel im Detail27

Zuerst wird mit der rechten Maustaste auf den Tabellenkopf des Tabellenkontrollfeldes geklickt.
Dort steht «ID_Sportart». Im Kontextmenü wird Ersetzen durch → Listenfeld ausgewählt.

Anschließend soll das Listenfeld bearbeitet werden, damit es auch die entsprechenden Daten
anzeigen kann. Wieder über das Kontextmenü geht es zu Spalte...

Es öffnen sich die Eigenschaften des ausgewählten Listenfeldes. Daten → Art des Listeninhaltes→ SQL soll gewählt werden. Mit Hilfe von SQL (StructuredQueryLanguage – Standardabfragesprache für Datenbanken) soll das Feld seinen Inhalt aus der Tabelle "Sportart" erhalten.

Eine einfache Datenbank – Testbeispiel im Detail28Ist SQL ausgewählt, so erscheint in der Zeile Listeninhalt rechts ein Button mit 3 Punkten … .
Wird dieser Button gedrückt, so öffnet sich der Editor für die Erstellung von Abfragen. Die im
Folgenden zu erstellenden Abfrage wird hier nur zusammengestellt und schließlich in dem Listenfeld selbst gespeichert.
Im Dialog «Tabelle oder Abfrage hinzufügen» erfolgt ein Klick auf Sportart → Hinzufügen →Schließen.

Für die erste Spalte wird in dem Abfrage-Editor das Feld "Sportart" ausgewählt. Dieses Feld soll
im Listenfeld sichtbar sein.
Die zweite Spalte soll mit dem Feld "ID" bestückt werden. Dieses Feld gibt nachher seinen Wert
an die Tabelle weiter, auf der das Unterformular basiert. Es werden also die ausgeschriebenen
Worte dargestellt und die passenden Kürzel abgespeichert.
Die Abfrage wird mit dem Speicherbutton in die Eigenschaften des Listenfeldes übertragen. Der
Editor wird anschließend geschlossen.
Im Listeninhalt ist jetzt der folgende Text zu lesen:
001 SELECT "Sportart", "ID" FROM "Sportart"
Eine einfache Datenbank – Testbeispiel im Detail29

Das ist der SQL-Code, der aus der Betätigung des Editors erwachsen ist. Umgangssprachlichausgedrückt heißt der Code: Wähle von der Tabelle "Sportart" als erstes die "Sportart" und als
zweites den dazugehörigen Schlüsselwert aus.
Diese Abfrage stellt das Minimum dar, das ausgewählt werden sollte. Natürlich könnte aucheine Sortierung eingebaut werden. Mit geschickter Wahl der in "ID" abgespeicherten Kürzel
ergibt sich aber bereits eine brauchbare Zusammenstellung der Sportarten. Wird nämlich keine
Sortierung vorgegeben, so erfolgt die Sortierung immer nach dem Primärschlüsselfeld. Um später in dem Listenfeld Sportarten zu sehen, müssen diese natürlich zuerst einmal in die Tabelle"Sportart" entsprechend eingegeben werden.

Nun soll noch der Titel geändert werden, der für das Feld "ID_Sportart" eingetragen wurde. Es
wird zwar weiterhin "ID_Sportart" abgespeichert. Sichtbar ist aber "Sportart". Deswegen: Allgemein → Titel → Sportart.
Soll z.B. das Design bei anderen Feldern angepasst werden, so lassen sich diese am bestenüber den Formularnavigator ansteuern. Werden Felder direkt angeklickt, so werden nicht nur
die Eingabefelder, sondern auch die Beschriftungsfelder markiert. Durch den Assistenten wurden sie zu Gruppen zusammengefasst. Das erfordert dann weitere Aktionen im Kontextmenü
der Auswahl.

Der Formularnavigator wird über die Symbolleiste «Formular-Entwurf» am unteren Bildschirmrand gestartet.

HinweisManchmal kann es vorkommen, dass die Symbolleisten für die Erstellung von Formularen beim Bearbeiten der Formulare nicht korrekt geöffnet werden. Der Formularnavigator ist dann nicht zu finden.
Die Symbolleisten lassen sich überAnsicht → Symbolleisten → Formular-Entwurf sowie Formular-Steuerelemente einblenden. Sollten die Symbolleisten danach auch bei der Dateneingabe sichtbar sein, so
muss hier entsprechend wieder die Ansicht ausgeschaltet werden.

Eine einfache Datenbank – Testbeispiel im Detail30Über den Formularnavigator kann jedes Feld einzeln aufgesucht werden. Im Kontextmenü sinddann die Eigenschaften des Feldes aufrufbar. Die Eigenschaften werden nach dem Verlassen
der Eigenschaften automatisch gespeichert. Es kann auch bei geöffnetem Eigenschaftsdialog
von einem Feld zum anderen gesprungen werden. Hierbei wird auch der jeweilige Zwischenstand gespeichert.
Wenn die Gestaltung nun beendet wurde, kann das Formular gespeichert und geschlossen werden. Auch eine Speicherung der Base-Datei ist jetzt wieder sinnvoll.
Wird jetzt das Formular zur Eingabe von Daten aufgerufen, dann könnte es ungefähr wie folgt
aussehen. In das folgende Formular wurde zum Test ein Datensatz eingetragen. Nach der Eingabe des Geschlechtes wurde erst einmal der Button Speichern betätigt. Dann konnten auchSportarten gewählt werden.

Bei der Nutzung des Formulars fallen einige Unannehmlichkeiten auf:

Eine einfache Datenbank – Testbeispiel im Detail31

1. Das Unterformular mit den Sportarten ist nicht direkt erreichbar. Wird mit dem Tabulator
navigiert, so springt der Tabulator nach der Eingabe des Geschlechtes direkt zum nächsten Teilnehmerdatensatz.
2. Die Navigationsleiste zeigt, wenn sie im Unterformular steht, die Datensatzzahl desUnterformulars an. Sie sollte besser nur durch das Hauptformular navigieren.
3. Das Geschlecht wird zur Zeit auswendig je nach Benutzervorliebe eingegeben. In derTabelle ist lediglich die Länge des Feldes auf 1 Zeichen begrenzt worden. Hier muss alsoeine sicherere Eingabe gewährleistet werden.
Zur Lösung dieser Probleme muss das Formular nicht für die Dateneingabe, sondern zum
Bearbeiten geöffnet werden:

Mit dem Tabulator zum Unterformular
Um mit dem Tabulator nach der Eingabe in das Feld "Geschlecht" nicht gleich weiter zum
nächsten Teilnehmer-Datensatz zu rutschen ist einmal die Bearbeitung der Aktivierungsreihenfolge, erreichbar über die Symbolleiste «Formular-Entwurf», notwendig.

Mit der Auswahl Auto Sortierung erfolgt nicht nur die Sortierung der angezeigten Steuerelemente, sondern auch die automatische Weiterleitung in das Unterformular. Das ist zwar aus
dem Dialog nicht ersichtlich, wird aber im Hintergrund so geregelt.

Eine einfache Datenbank – Testbeispiel im Detail32Navigationsleiste des Hauptformulars auch im Unterformular aktivieren

Der Formularnavigator wird geöffnet. Die Eigenschaften des Unterformulars werden aufgesucht.

Unter Daten → Symbolleiste Navigation wird der Wert von «Ja» auf «Übergeordnetes Formular»
geändert. Anschließend zeigt die Symbolleiste Navigation immer die Nummer des Datensatzes
aus der Tabelle "Teilnehmer" (Hauptformular) an.

Eingabe eines Kontrollfeldes einschränken
Für die Einschränkung der Eingabe darf das Kontrollfeld kein einfaches Texteingabefeld sein. Im
Hauptkapitel Formulare findet sich für die Eingabe des Geschlechtes die Lösung über einen«Gruppierungsrahmen». Hier soll deshalb eine andere Lösung, nämlich noch einmal über ein
Listenfeld, vorgestellt werden.
Zuerst wird das Formularfeld für die Eingabe des Geschlechts über den Navigator markiert.
Über das mit der rechten Maustaste erreichbare Kontextmenü wird Ersetzen durch → Listenfeld
ausgewählt. Anschließend wird über das Kontextmenü Eigenschaften ausgewählt.

Eine einfache Datenbank – Testbeispiel im Detail33

Daten → Art des Listeninhalts bleibt auf dem Wert «Werteliste» stehen. In Daten → Listeninhalt
werden die Kürzel 'm' und 'w' über den Button ▼ in das Feld untereinander eingegeben. Diese
Kürzel sind die Daten, die an die Tabelle "Teilnehmer" weiter gegeben werden.

Eine einfache Datenbank – Testbeispiel im Detail34

In Allgemein → Listen-Einträge wird das angegeben, was durch das Listenfeld angezeigt werden soll. Das kann auch 'm' und 'w' sein. Es muss auf jeden Fall die gleiche Reihenfolge haben
wie die Einträge unter Daten.
Jetzt wird noch unter Allgemein → Aufklappbar → Ja gewählt. Hierzu muss in den allgemeinen
Eigenschaften recht weit unten gesucht werden.
Damit ist das Eingabeformular so weit, dass die auffälligsten Unannehmlichkeiten beseitigt wurden. Das Formular und die Datenbankdatei müssen wieder abgespeichert werden. Die Eingabe
von Teilnehmern und Teilnehmerinnen sowie die Zuordnung zu Sportarten kann beginnen.
Damit die folgenden Schritte sinnvoll sind, sollten erst einmal einige Datensätze eingegeben
werden. Dabei sollte darauf geachtet werden, dass die Teilnehmer und Teilnehmerinnen vom
Alter und von der Sportart auch einmal in Konkurrenz zueinander treten können. Sonst sehen
die anschließenden Abfragen und Berichte doch recht nichtssagend aus.

AbfrageIn einer Abfrage können z. B. Inhalte verschiedener Tabellen zusammengefasst werden. Mit
dem ersten Zugriff sollen erst einmal alle Teilnehmer mit den Sportarten dargestellt werden,
die sie belegt haben.
Der Start dazu geht über Abfragen → Abfrage in der Entwurfsansicht erstellen … . Es erscheint
ein Dialog zur Tabellenauswahl, aus dem wir alle Tabellen für die Abfrage auswählen. Am übersichtlichsten ist es, wenn dabei die Tabelle "rel_Teilnehmer_Sportarten" als zweite Tabelle ausgewählt wird. Dann sind auch gleich die Verbindungen gut zu erkennen.

Die Felder, die in der Abfrage dargestellt werden sollen, können entweder durch einen Doppelklick auf die Feldnamen in den Tabellen oder durch Auswahl in der Zeile Feld eingestellt werden. Bei der Auswahl in der Zeile werden die Felder sämtlicher aufgeführter Tabellen aufgelistet. Um die Felder den Tabellen richtig zuordnen zu können, werden sie in Abfragen nach

Eine einfache Datenbank – Testbeispiel im Detail35

"Tabellenname"."Feldname" bezeichnet. Wird statt des Feldnamen ein «*» eingesetzt, so
bedeutet dies, dass alle Felder der entsprechenden Tabelle angezeigt werden sollen.

Eine Abfrage sollte grundsätzlich vor dem Abspeichern auch einmal ausgeführt werden um zu
sehen, ob sie denn wirklich das erhoffte Ergebnis liefert. Hierzu kann entweder direkt der oben
gezeigten Button angeklickt, alternativ auch F5 gedrückt oder der Weg über Bearbeiten →Abfrage ausführen gewählt werden.

Die Abfrage zeigt jetzt alle Kombinationen der Teilnehmer und Sportarten an. Hat ein Teilnehmer mehrere Sportarten belegt, so werden mehrere Datensätze angezeigt. Teilnehmer ohne
Sportarten erscheinen nicht.
Um bei einem Wettkampf unterschiedliche Altersgruppen zusammen zu stellen, ist der Geburtsjahrgang entscheidend. Es kommt darauf an, wie alt eine Person in dem jeweiligen Jahr wird.
Der Geburtsjahrgang kann mit unterschiedlichen Funktionen ermittelt werden. Die folgende
Eingabe zeigt die Variante, die für Personen mit Englischkenntnissen vielleicht auch soerschließbar ist:

001 EXTRACT (YEAR FROM CURRENT_DATE) - EXTRACT (YEAR FROM "Geburtstag")Über EXTRACT(YEAR FROM CURRENT_DATE) wird das aktuelle Jahr bestimmt. Entsprechend wird
auch über EXTRACT(YEAR FROM "Geburtstag") das Jahr des Geburtstags ermittelt.
Diese und viele andere Funktionen, die mit der eingebauten HSQLDB oder der FIREBIRD-Datenbank
zusammen arbeiten, sind im Anhang des Handbuches beschrieben.

Eine einfache Datenbank – Testbeispiel im Detail36Wird die Abfrage ausgeführt, so erscheint die entsprechende Berechnung für das Jahr 2014, dadiese Abfrage eben in dem entsprechenden Jahr ausgeführt wurde.
Etwas störend dürfte dabei sein, dass der gesamte Code, den wir als Feld eingegeben haben,
eben auch in der Spaltenüberschrift erscheint. Dem wird abgeholfen, indem für den Code einalternativer Name eingegeben wird, unter dem das Ergebnis erscheinen soll.

In der Zeile «Alias» wird die Bezeichnung «Sportalter» eingegeben. Hier sollte nicht «Alter» stehen, weil die Person vielleicht erst im Laufe des Jahres dieses Alter erreicht. Im Kapitel «Aktuelles Alter ermitteln» steht beschreiben, wie das tatsächliche Alter ermittelt werden kann.

Wird die Abfrage erneut ausgeführt, so erscheint in dem Spaltenkopf nicht mehr die Formel
sondern die Bezeichnung «Sportalter».
Damit der Code für den Anfang nicht zu verwirrend wird, sollte die Abfrage unter dem Namen"Sportalter" abgespeichert werden. Diese Abfrage dient dann als Grundlage für die nächste
Abfrage, die das "Sportalter" jetzt einer "Altersklasse" zuordnet.

Eine einfache Datenbank – Testbeispiel im Detail37

Die Abfrage "Sportalter" wurde als Grundlage für die 2. Abfrage ausgesucht. Vor der Bezeichnung «Sportalter» im Tabellenarbeitsbereich ist ein anderes Symbol zu sehen als bei den Tabellen der ersten Abfrage. Dieses Symbol zeigt an, dass die Grundlage dieser Abfrage eben eine
Abfrage und keine Tabelle ist.
Durch Doppelklick auf «*» oder Auswahl von «Sportalter.*» werden alle Felder ausgewählt. Die
gesamte Abfrage von vorher wird also übernommen. Nur die Formel ist nicht mehr zu sehen.
Auf das Feld "Sportalter" soll nun zugegriffen werden. Das Sportalter bestimmt ja, in welcher
Altersklasse die jeweiligen Personen starten.
Damit die Ermittlung nicht allzu kompliziert wird soll hier folgende Zuordnung nachvollzogen
werden: Unter 20 Jahren werden die Teilnehmer immer in zwei Jahrgängen, beginnend mit 0,
zusammen gefasst. Ab 20 Jahren werden Gruppen für jeweils 10 Jahre gebildet, also von 20-30
Jahren usw.

Eine einfache Datenbank – Testbeispiel im Detail38Solche Formeln gehören eigentlich längst nicht mehr zum Einstiegs-Repertoire. Eine einfachere
Zuteilung der Altersklassen wäre sogar mit Hilfe des folgenden Berichtes möglich. Für differenziertere Zuteilung sei erneut auf den Anhang des Handbuches verwiesen.
001 CASE WHEN "Sportalter" > 19 THEN CEILING( "Sportalter" / 10 ) * 10 ELSE
"Sportalter" - MOD( "Sportalter", 2 ) END
CASE WHEN Überprüfung einer Bedingung, wenn korrekt (THEN), dann diesen Wert nehmen,
wenn nicht korrekt (ELSE), dann den anderen Wert nehmen.
In die deutsche Sprache übertragen bedeutet das so viel wie:
Für den Fall, dass das Sportalter über 19 Jahren ist, dividiere das Sportalter durch 10 und gib
nur den Ganzzahlwert wieder. Diesen Ganzzahlwert multipliziere wieder mit 10.
Ist das Sportalter bis einschließlich 19 Jahren, so nehme den Wert des Sportalters und subtrahiere davon den Rest, der sich ergibt, wenn das Sportalter durch 2 dividiert wird. Das ergibt
dann z. B. Für 19:
19/2 = 18, Rest 1, also 19 – 1 = 18.
Alle Teilnehmer über 19 Jahren werden damit einer Gruppe für das jeweilige Jahrzehnt zugewiesen. Alle Teilnehmer darunter werden einer Gruppe zugewiesen, die der jeweiligen niedrigeren
geraden Zahl entspricht.
Dieser Formel wurde wieder ein Alias zugewiesen, in diesem Falle der Alias "Altersklasse".
Die Abfrage kann jetzt unter dem Namen "Meldung" gespeichert werden.

Eine einfache Datenbank – Testbeispiel im Detail39

Das Ausschalten der Design-Ansicht ist hier eigentlich nicht notwendig, da alle Eingaben in derDesign-Ansicht ohne größere Probleme möglich sind. Den Code von Abfragen einmal genauer
anzusehen, kann allerdings nie schaden. Schließlich gibt es auch SQL-Formulierungen, die nur
schlecht in die Design-Ansicht passen oder die dort gar nicht möglich sind. Dafür wird dann die
direkte Eingabe im SQL-Code genutzt.

Im Code sind Felder und Tabellen in doppelte Anführungszeichen gesetzt und in einem ockerfarbigen Farbton dargestellt. Begriffe des SQL-Codes sind in blau gehalten, Funktionen der Datenbank in grün. Die Bezeichnung AS erscheint in neueren Versionen von LO nicht mehr.
001 SELECT
002"Sportalter".*,003
CASE WHEN "Sportalter" > 19 THEN CEILING( "Sportalter" / 10 ) * 10004
ELSE "Sportalter" - MOD( "Sportalter", 2 ) END
005
AS "Altersklasse"006 FROM "Sportalter"
Der Teil mit der Formel wurde ja schon erwähnt. Hier jetzt der Rahmen.
001 SELECT "Sportalter".*, ... AS "Altersklasse" FROM "Sportalter"
Wähle aus der Tabelle "Sportalter" alle Datensätze aus und zusätzlich das, was durch die Formel bestimmt wird. Das, was durch die Formel bestimmt wird, bezeichne als "Altersklasse".
Der Code unterscheidet nicht zwischen Tabellen und Abfragen als Grundlage der Daten. Er
funktioniert deshalb nur in der grafischen Benutzeroberfläche von Base. Die Benennung vonAbfragen muss dafür immer anders sein als die Benennung von Tabellen.
Sobald in einer Abfrage bei ausgeschalteter Design-Ansicht der Button SQL (für SQL-Kommando direkt ausführen) gedrückt wird, wird die Datenbank mit einer Fehlermeldung reagieren. Die eingebettete Datenbank kennt die Abfrage "Sportalter" nicht, auf die sich die aktuellen
Abfrage "Meldung" bezieht.

Ausdruck im BerichtÜber Berichte → Bericht in der Entwurfsansicht erstellen … wird ein Bericht erstellt, der eineübersichtliche Teilnehmerliste, sortiert nach Sportart, Geschlecht und Altersklasse darstellensoll.
Wird der Editor gestartet, so ist zuerst der Dialog «Feld hinzufügen» im Vordergrund. Für diesen
Dialog wird die von der alphabetischen Sortierung her erste Tabelle als Basis genommen. Es
muss für den Bericht aber die Abfrage als Datenquelle herausgesucht werden.
Im Berichtsfenster befindet sich auf der rechten Seite die Übersicht über die Eigenschaften desgerade aktiven Objektes. Sollte die Leiste nicht sichtbar sein, so muss sie über Ansicht →Steuerelement-Eigenschaften… ausgewählt werden.

Eine einfache Datenbank – Testbeispiel im Detail40

Aus den Eigenschaften wird im Reiter Daten → Art des Inhaltes → Abfrage ausgewählt. Als
Inhalt wird dann die Abfrage "Meldung" gewählt, die als letzte zusammenfassende Abfrage
erstellt wurde.

Der Report-Designer zeigt jetzt sämtliche Felder der ausgesuchten Abfrage an.
Im nächsten Schritt wird der Sortier-Dialog ausgewählt:Die Sortierung kann auch über Ansicht → Sortierung und Gruppierung angezeigt werden.

Eine einfache Datenbank – Testbeispiel im Detail41

Im Sortierungs- und Gruppierungs-Dialog werden nacheinander die Felder "Sportart","Geschlecht" und "Altersklasse" ausgewählt.
Auf der linken Seite des Berichtes erscheint bei jeder Sortierungsauswahl ein Gruppenkopf fürdie Sortierung. Die Eigenschaften der Sortierung und Gruppierung werden einfach erst einmal
so gelassen wie im Standard vorgesehen.
Der Dialog «Sortierung und Gruppierung» kann nun geschlossen werden.

Eine einfache Datenbank – Testbeispiel im Detail42Der Gruppenkopf «Sportart Kopf» wird ausgewählt. Dies ist an der weißen Umrandung des Kopfes sichtbar. Anschließend wird im Dialog «Feld hinzufügen:» mit einem Mausklick auf das Feld
«Sportart» ein Beschriftungsfeld und ein Textfeld eingefügt, das den Inhalt des Feldes «Sportart» aufnehmen soll.
Mit dem gleichen Verfahren werden die Felder «Geschlecht» und «Alter» den passenden Gruppenköpfen zugewiesen.
Sämtliche verbleibenden Felder werden in den Bereich «Detail» eingefügt.
Der Berichtsentwurf dürfte jetzt wie folgt aussehen:

Eine einfache Datenbank – Testbeispiel im Detail43

Anschließend sollte der Bericht erst einmal abgespeichert werden. Als Name würde sich so
etwas wie «Teilnehmerliste» anbieten.
Auch die Datenbankdatei selbst sollte abgespeichert werden, da sonst die Speicherung desBerichtes erst einmal nur temporär vorgenommen wird.

HinweisGerade beim Gestalten eines Berichtes mit dem Report-Designer fallen oft Instabilitäten
des Programms auf. Ist ein wichtiger Schritt gelungen, so sollte auf jeden Fall sowohl der
Bericht als auch die Datenbankdatei gespeichert werden.
Die spätere Ausführung eines Berichtes ist von diesen Instabilitäten zum Glück nicht
betroffen.

Wird dieser Bericht mit entsprechenden Daten ausgeführt, dann ergibt sich in etwa das folgende Bild:

Eine einfache Datenbank – Testbeispiel im Detail44Der Beginn des Berichtes zeigt hier zwei männliche Teilnehmer an, die Hochsprung machen
wollen und der Altersklasse 20 angehören.
Bei der Ausführung des Berichtes fallen einige Designmängel auf:
1. Die Abstände zwischen den Gruppenköpfen und dem Inhalt des Detailbereichs sind vielzu groß.
2. Das Geschlecht wird mit «m» bzw. «w» angegeben. Besser wäre eine Bezeichnung wie«Herren» und «Damen».
3. Bei der Altersklasse steht, vermutlich wegen der Division in der Abfrage, eine Zahl mit
einer Nachkommastelle, wobei als Dezimaltrenner ein Punkt gesetzt wird.
4. Die Bezeichner für die dargestellten Felder aus dem Bereich «Detail» («Nachname»,«Vorname» usw.) sollten besser gemeinsam für alle Inhalte des Bereiches als Tabellenköpfe über den Inhalten stehen.

Abstände zwischen den Berichtsbereichen einstellen
Die Abstände zwischen den Bereichen können direkt an den Tabellenköpfen durch Schieben mit
der Maus verringert werde, Es ist auch möglich, einen Bereich zu markieren und in den Eigenschaften des Gruppenkopfes die Höhe über eine Zahleneingabe zu regeln. Dafür darf kein Feld,sondern nur der Gruppenkopf markiert sein.
Es ist nicht möglich, einen Bereich kleiner zu wählen als die darin existierenden Beschriftungsund Textfelder sind.
Der Bereich «Altersklasse» sollte dabei so groß gewählt werden, dass er noch die Beschriftungsfelder aus dem Bereich «Detail» aufnehmen kann.
Außerdem muss bei der Auswahl der Abstände berücksichtigt werden, dass eine folgende
Gruppe nicht zu nah unter der vorhergehenden Gruppe erscheint. Die Beschriftungs- und Textfelder benötigen gegebenenfalls auch einen Abstand nach oben. Wird dieser Abstand nachoben nicht gewünscht, so kann damit nachgeholfen werden, dass zusätzlich zu den Gruppenköpfen auch Gruppenfüße angezeigt werden. Eine solche Einstellung ist über Ansicht → Sortierung und Gruppierung für jede Gruppe möglich.

Eine einfache Datenbank – Testbeispiel im Detail45Beeinflussung eines Textfeldinhaltes durch eine Formel
Die Bezeichnung des Geschlechtes aus der Tabelle reicht für die Ansprüchen einer Teilnehmerliste nicht aus. Es könnte eine entsprechende Umbenennung bereits in der Abfrage erfolgen. Da
die Abfrage aber bereits erstellt wurde, werden jetzt die Möglichkeiten des Berichtes genutzt.
Das Textfeld «=Geschlecht» wird markiert. In den Eigenschaften auf der rechten Seite desReport-Designers wird der Reiter Daten → Datenfeld aufgesucht. Dort wird der Button mit den
3 Punkten … betätigt. Es erscheint der Funktions-Assistent. Alle Funktionen sind hier allerdings
nicht übersetzt, sondern in englischer Sprache erreichbar.

In der Kategorie «Logical» steckt die Funktion «IF». Die Vorgehensweise bei dieser Funktion ist
gleich der Funktion «WENN» aus LO-Calc.
Ein Testwert wird eingegeben. Dabei ist das Feld der Abfrage, aus der die Daten ausgelesen
werden, in eckige Klammern zu setzen. Texte müssen in doppelte Anführungszeichen gesetzt
werden. Wenn im Feld "Geschlecht" der Wert «m» steht, dann soll in dem Feld des Berichtes«Herren» angezeigt werden. Steht dort kein «m», dann wird «Damen» angezeigt.
Die Eingabe wird mit OK bestätigt.
Damit ist die Formulierung des Feldes entsprechend umgestellt.

Umstellung der Formatierung eines Textfeldes
Das Feld, das den Inhalt der Datenbank aufnehmen soll, wird zwar in Berichten als «Textfeld»
bezeichnet. Es kann aber genau so formatiert werden wie Felder in Tabellen im Writer oder in
Calc.
Das Feld «=Altersklasse» wird markiert. Bei den Eigenschaften am rechten Bildschirmrand wird
Allgemein → Formatierung aufgesucht. Die Formatierung steht dort auf «Text». Der Button mit
den 3 Punkten ( … ) wird gedrückt. Es öffnet sich der Formatierungs-Dialog, der auch aus Calc,
dem Writer oder bei Formularerstellungen bekannt ist. Hier wird Kategorie → Zahl ausgewählt
und mit OK bestätigt.
Die Formatierung der Anzeige ist nun von Text auf Zahl umgestellt.

Eine einfache Datenbank – Testbeispiel im Detail46

Verschieben von Feldern im Report-Designer
Felder können beim Report-Designer auch über die Grenzen eines Bereiches hinweg verschoben werden. Im Zielbereich muss allerdings genügend Platz für das Feld vorhanden sein. Es
kann nämlich nicht ein Feld über einem anderen liegen.
Die Positionierung mit der Maus ist je nach System so ungenau, dass am besten reichlich Platz
vorhanden sein sollte. Sind erst einmal die Felder in einem Bereich vorhanden wie hier dem
Gruppenkopf «Altersklasse», so lassen sie sich auch mit den Pfeilfeldern und mit Tastatureingaben genau positionieren.
Zur Positionierung mit der Tastatur ist in den Eigenschaften Allgemein → Position X und Allgemein → Position Y auf zu suchen.

Hier wurde noch ein Beschriftungsfeld für die Überschrift hinzugefügt. Die Eingabe des Textes
für das Beschriftungsfeld erfolgt in den Eigenschaften des Feldes.
Der Seitenfuß wurde in den Eigenschaften auf Sichtbar → Nein eingestellt. Er nimmt sonst am
unteren Rand des Dokumentes zu viel Platz weg. Hierbei sollte bedacht werden, dass die verfügbare Höhe bereits durch die Größe der Seitenränder zusätzlich verringert wird. Standardmäßig sind alle Seitenränder bei einer DIN-A4-Seite auf 2 cm eingestellt.
Weitere Formatierungsmöglichkeiten für den Bericht werden in dem gesonderten Kapitel«Berichte mit dem Report-Designer» beschreiben.

Erweiterungen der Beispieldatenbank
Das vorgestellte Beispiel ist natürlich nur der erste Schritt für eine Datenbank im Sportbereich.
Zuerst einmal sollte auf jeden Fall ein Feld ergänzt werden, das die jeweiligen Leistungen aufnimmt. Solch ein Feld wäre gut in der Tabelle "rel_Teilnehmer_Sportart" unter zu bringen.
Sollen die Eingaben allerdings für mehrere Wettkämpfe in gleichen Sportarten gelten, so ist
außerdem noch ein Datumsfeld oder ein anderes Feld, das dem jeweiligen Wettkampf zugeordnet werden kann, in die Tabelle "rel_Teilnehmer_Sportart" aufzunehmen. Das Feld muss dannauch Teil des gemeinsamen Primärschlüssels sein.
Vielleicht käme noch die Vereinszugehörigkeit hinzu. Dazu würde ein Feld in der Tabelle "Teilnehmer" ausreichen. Bei vielen gleichen Vereinen bietet sich aber auch eine separate Tabelle"Vereine" sowie der entsprechende Fremdschlüssel in der Tabelle "Teilnehmer" an.
Dann muss natürlich, wie bei allen Wettbewerben, ermittelt werden, wer denn nun in der jeweiligen Altersklasse auf welcher Platzierung gelandet ist. Sortierung ist hier gefragt, die vielleicht
wieder als Bericht in einer Ergebnisliste landet.

Eine einfache Datenbank – Testbeispiel im Detail

47

Schön wäre dann, wenn jeder Teilnehmer (wieder über einen Bericht) eine gestaltete Urkunde
mit den persönlichen Leistungen und der Platzierung erhält.
Solche Erweiterungen sind ohne weiteres möglich. Das sollen die kommenden Kapitel desHandbuches zeigen.

Weiteres Einführungs- und Beispielmaterial
Neben den beiden Hauptdatenbanken für das Handbuch «Medien_ohne_Makros.odb» und«Medien_mit_Makros.odb» steht noch ein ganzes Bündel von Beispieldatenbanken mit einer
ausführlichen Erklärung an gleicher Stelle wie das Handbuch zum Download bereit.
Ein mehrstufiges Videotutorial von F3K Total, das von den Grundlagen her den Einstieg ermöglicht ist gut von dieser Seite aus zu starten: http://de.openoffice.info/viewtopic.php?
f=27&t=54234#p237478
Anlaufpunkte für Fragen zu Base sind im deutschsprachigen Raum vor allem die Foren https://ask.libreoffice.org/c/german/6 (Forum von LibreOffice – Dokument Foundation) und http://www.libreoffice-forum.de/viewforum.php?f=10 .

Eine einfache Datenbank – Testbeispiel im Detail48