Base
 

Kapitel 2
Datenbank erstellen

 

Copyright

Dieses Dokument unterliegt dem Copyright © 2015. 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.02.2023. Basierend auf der LibreOffice Version 7.5.

Inhalt

Kapitel 2 Datenbank erstellen

Allgemeines bezüglich der Erstellung einer Datenbank

Neue Datenbank als interne Datenbank

Zugriff auf externe Datenbanken

MySQL/MariaDB-Datenbanken

Erstellen eines Nutzers und einer Datenbank

Direkte Verbindung zu MySQL/MariaDB

MySQL/MariaDB-Verbindung über JDBC

MySQL/MariaDB-Verbindung über ODBC

Verbindung zur MySQL-Datenbank über den Datenbank-Assistenten

Verbindung zu MySQL/MariaDB über das Internet

Zugriff auf gespeicherte Prozeduren in MySQL/MariaDB

PostgreSQL

Erstellen eines Nutzers und einer Datenbank

Direkte Verbindung zu PostgreSQL

PostgreSQL-Verbindung über JDBC

PostgreSQL-Verbindung über und ODBC

Verbindung zu PostgreSQL über das Internet

Autoincrement-Werte bei PostgreSQL

dBase-Datenbanken

Tabellendokumente und Tabellen in Writer-Dokumenten

Daten in Calc bearbeiten und in Base aktualisieren

Tabellen aus dem Internet über Calc automatisch aktualisiert in Base auslesen

Thunderbird Adressbuch

Texttabellen

Texttabellen innerhalb einer internen HSQLDB-Datenbank

Texttabellen als Grundlage für eine eigenständige Datenbankdatei

Firebird

Erstellen eines Nutzers und einer Datenbank

Direkte Verbindung zu einem Firebird Server

Firebird-Verbindung über JDBC

Firebird-Verbindung über ODBC

Direkte Verbindung zu einer Firebird-Datei

Von der externen Firebird-Datei zur Serverdatenbank

Benutzerverwaltung bei der externen Firebird Datenbank

SQLite

Erstellen einer Datenbank

SQLite-Verbindung über ODBC

SQLite-Verbindung über JDBC

Zugriff auf Access

Nachträgliche Bearbeitung der Verbindungseigenschaften

Maskierung von Tabellennamen und Feldnamen

Treiberverbindungen aufbewahren

Datenbankverbindung über SSH

Datenbanken in der Cloud

Bugs und Workarounds bei verschiedenen Datenbankverbindungen

MySQL/MariaDB

PostgreSQL

dBase

 

 

Allgemeines bezüglich der Erstellung einer Datenbank

In LibreOffice gibt es das Programmmodul «Base». Dies stellt eine grafische Benutzeroberfläche für Datenbanken zur Verfügung. Daneben existiert, in LibreOffice eingebunden, die interne Datenbank «HSQLDB» sowie die interne Datenbank «Firebird». Diese internen Versionen der Datenbanken können nur als Datenbanken von einem Nutzer betrieben werden. Die gesamten Daten sind in der *.odb-Datei mit abgespeichert und diese Datei ist nur für einen Benutzer nicht schreibgeschützt zu öffnen.

Neue Datenbank als interne Datenbank

Sofern nicht von vornherein eine Multiuserdatenbank geplant ist oder erst einmal erste Erfahrungen mit einer Datenbank gesammelt werden sollen, ist die interne Datenbank gut nutzbar. Diese lässt sich später auch mit ein paar Kniffen noch zur externen Datenbank umwandeln, auf die dann auch mehrere User gleichzeitig zugreifen können, wenn der Datenbankserver läuft. Eine Beschreibung dazu in Bezug auf die HSQLDB erfolgt im Anhang dieses Handbuches im Kapitel «Datenbankverbindung zu einer externen HSQLDB». Der Umstieg bei Firebird zur externen Variante ist in den Kapiteln Direkte Verbindung zu einer Firebird-Datei und Von der externen Firebird-Datei zur Serverdatenbank beschrieben.

Hinweis

Die interne HSQLDB benötigt (wie auch der ReportBuilder und die Assistenten) zwingend Java. Häufigster Fehler bei der Erkennung von Java durch LibreOffice ist, dass Nutzer LibreOffice in einer 64bit-Version installiert haben, Java aber in der 32bit-Version. LibreOffice und Java müssen in der gleichen Version vorliegen.

Für MAC-User ist außerdem wichtig zu wissen, dass die JavaRuntimeEnvironment (JRE) nicht für den Betrieb von Base ausreicht. Hier ist das JavaDevelopementKit (JDK) notwendig. Manche Java-Versionen passen hier allerdings nicht korrekt zu LibreOffice. Die Versionen von AdoptOpenJDK scheinen hier besser zu funktionieren: https://adoptopenjdk.net/releases.html?variant=openjdk15&jvmVariant=hotspot

LibreOffice arbeitet ja nach Version auch nur mit bestimmten Versionen von Java zusammen. Dies fällt z.B. auf, wenn ältere Versionen von LibreOffice mit einer aktuellen Java-Laufzeitumgebung eine fehlende Java-Version anmahnen. Unter MAC scheint es außerdem vor zu kommen, dass zu neue Versionen des JDK zwar angezeigt werden, aber mit Base trotzdem nicht zusammen arbeiten. Hier hilft immer ein Blick auf https://ask.libreoffice.org/tag/base. Dort werden auch unkonventionelle Lösungen wie die JDK von https://adoptium.net/temurin empfohlen.

Hinweis

Die Nutzung großer Datenmengen kann bei Java zu Geschwindigkeitsverlusten führen. Dies kann von der verwendeten Java-Version abhängen. Ein einfacher Test bei direktem Ausführen von SQL ergibt für eine Tabelle von 15 Spalten und 30.000 Datensätzen deutliche Unterschiede für die Zeit, die für das Scrollen zum letzten Datensatz notwendig sind. Die interne HSQLDB braucht hier fast 30 Sekunden, Firebird hingegen schafft das in 1 Sekunde.

Auch bei externen Datenbanken lässt sich das in Abhängigkeit von dem Treiber be­obachten. Die MariaDB mit der direkten Verbindung von LibreOffice aus liegt hier mit Firebird gleichauf. Die gleiche Datenbank, jetzt aber über JDBC mit LibreOffice verbunden, ist genauso langsam wie die interne HSQLDB.

Die Erstellung einer internen Datenbank erfolgt direkt über den Eingangsbildschirm von LO mit einem Klick auf den Button Datenbank oder über Datei → Neu → Datenbank. Der Datenbank - Assistent startet mit dem folgenden Bildschirm:

 

Das Optionsfeld «Neue Datenbank erstellen» ist für eine neue interne Datenbank angewählt. Standardmäßig ist dies die eingebettete HSQLDB. Ab LO 4.2 steht zusätzlich die interne Firebird Datenbank zur Verfügung, bis Version LO 6.0 müssen dafür aber noch die experimentellen Funktionen (Extras → Optionen → LibreOffice → Erweitert → Optionale Funktionen) aktiviert werden. Auch ab LO 6.4.3 ist dies wieder notwendig, da die Integration weiter Probleme bereitet. Nur so steht hier auch «Firebird (eingebettet)» zur Verfügung.

Die weiteren Optionen dienen dazu, eine bestehende Datei zu öffnen oder eine Verbindung zu einer externen Datenbank wie z.B. einem Adressbuch, einer MySQL-Datenbank o.ä. aufzubauen.

 

Eine in LibreOffice angemeldete Datenbank kann von den anderen Programmteilen von LibreOffice als Datenquelle genutzt werden (z. B. Serienbrief). Diese Anmeldung kann aber auch zu einem späteren Zeitraum erfolgen. Deshalb ist an dieser Stelle erst einmal das Optionsfeld Nein, die Datenbank soll nicht angemeldet werden, ausgewählt.

Bei den Markierfeldern ist lediglich «Die Datenbank zum Bearbeiten öffnen» markiert. Assistenten zur Erstellung von Tabellen, Abfragen usw. werden in diesem Handbuch nicht genutzt. Ihre Funktion ist lediglich für den einfachen Einstieg in die Materie geeignet.

Die Datenbankdatei wird fertiggestellt, indem direkt nach einem Namen und einem Speicherort gefragt wird. An der entsprechenden Stelle wird dann die *.odb-Datei erzeugt, die zur Aufnahme von Daten aus der internen Datenbank, zur Speicherung von Abfragen, Formularen und Berichten gedacht ist.

Im Gegensatz zu den anderen Programmteilen von LibreOffice wird also die Datei abgespeichert, bevor der Nutzer überhaupt irgendwelche für ihn sichtbare Eingaben getätigt hat.

Die interne Firebird Datenbank könnte in Zukunft die interne HSQLDB ersetzen. Zur Vereinfachung des Wechsels wird an einem Migrationstool gearbeitet. Dieses Tool bietet die Migration von HSQLDB zu Firebird an, wenn über Extras → Optionen → LibreOffice → Erweitert → Optionale (instabile) Einstellungen die experimentellen Funktionen aktiviert werden:

 

Die HSQLDB ist auch für LibreOffice 7.4 die Standarddatenbank für jeden Nutzer; die Firebird-Datenbank hat mit LO 5.3 ein Update auf die aktuelle Firebird-Version 3.0 vollzogen, ist aber bisher nur experimentell zu empfehlen. Die Datenbank-Beispiele beziehen sich weiterhin auf die HSQLDB, sind aber so angepasst, dass die meisten Funktionen direkt auf Firebird übertragbar sind. Gegebenenfalls werden Alternativen in Firebird direkt aufgezeigt.

Hinweis

Die Nutzung von Firebird ist mit der Version LO 6.4.3 wieder in den experimentellen Status zurückversetzt worden. Einige Fehler der internen Version sind so beschaffen, dass sie bei Abfragen gleich die ganze Datenbank zum Absturz bringen lassen und den Inhalt von Tabellen erst nach einem Neustart von Base wieder anzeigen.

Vorsicht

 

Mit den experimentellen Funktionen erscheint bei jedem Öffnen einer internen HSQLDB-Datenbank (über den Zugriff auf den Tabellencontainer) ab LO 6.1 der folgende Dialog:

 

Hier ist äußerste Vorsicht geboten! Später drücken und dann erst einmal eine Sicherungskopie der Datenbankdatei machen. Auf keinen Fall einfach bestätigen! Die Migration funktioniert nicht einwandfrei, kann dies auch vermutlich nie.

  1. 1.Sicherheitskopie der HSQLDB-Datenbankdatei anfertigen.  

  2. 2.Funktionen nach der im Anhang des Handbuches unter «Migration HSQLDB → Firebird» stehenden Liste so weit wie möglich anpassen.  

  3. 3.Ansichten, die nicht direkt umgestellt werden können, vom SQL-Code her kopieren und als Abfragen abspeichern.  

  4. 4.Tabellennamen und Spaltennamen dürfen in Firebird nur maximal 31 Zeichen lang sein. Gegebenenfalls also anpassen.  

  5. 5.Reine Texttabellen (eingebundene *.csv-Tabelle etc.) sind unter Firebird nicht möglich, müssen also anderweitig ersetzt werden. Prinzipiell gibt es auch bei Firebird eine Möglichkeit, bestimmte Textdateien (nicht: *.csv-Dateien) einzubinden. Diese Funktion ist aber aus Sicherheitsgründen standardmäßig nicht eingeschaltet. 

Zugriff auf externe Datenbanken

Alle externen Datenbanken müssen zuerst einmal existieren. Angenommen es soll der Zugriff auf die Datenbank einer eigenen Homepage erfolgen. Dort muss zuerst einmal die Datenbank selbst mit einem Namen und Zugangsdaten gegründet worden sein, bevor externe Programme darauf zugreifen können.

Existiert nun diese externe Datenbank, so kann sie, je nach vorhandener Treibersoftware, zur Erstellung von Tabellen und anschließender Dateneingabe und -abfrage genutzt werden.

Über Datei → Neu → Datenbank wird der Datenbankassistent geöffnet und die Verbindung zu einer bestehenden Datenbank hergestellt. Die Liste der hier aufgeführten Treiber, die mit Datenbanken verbinden, variiert etwas je nach Betriebssystem und Benutzeroberfläche. Immer dabei sind aber

Je nach gewählter Datenbank variieren nun die Verbindungseinstellungen. Diese können auch gegebenenfalls später noch korrigiert werden, wenn erst einmal die *.odb-Datei erstellt worden ist.

Bei manchen Datenbanktypen können keine neuen Daten eingegeben werden. Sie sind deshalb nur zum Suchen von Daten geeignet (z.B. Tabellendokument, Adressbücher). Die Beschreibungen in den folgenden Kapiteln beziehen sich ausschließlich auf die Verwendung von LibreOffice Base mit der internen Datenbank HSQLDB. Die meisten Ausführungen lassen sich auf Datenbanken wie MySQL, PostgreSQL etc. übertragen und entsprechend anwenden.

Hier soll nur kurz an ein paar Beispielen vorgestellt werden, wie der Kontakt zu anderen externen Datenbanken hergestellt wird.

Hinweis

In Abhängigkeit vom benutzten Treiber ist es möglich, gleichzeitig auf mehrere Datenbanken des jeweiligen Servers zuzugreifen. Wird z.B. in MySQL/MariaDB mit der direkten Verbindung ein Kontakt zu einer Datenbank hergestellt, so werden in Base gleichzeitig alle anderen Datenbanken auf dem Server angezeigt, bei denen der angegebene Nutzer Leserecht hat. Es ist also problemlos möglich, Daten von einer Datenbank zu einer anderen zu kopieren, zusammenhängende Abfragen durchzuführen usw.

Hinweis

ODBC-Verbindungen werden in Linux direkt über die Anweisungen in den Dateien «odbcinst.ini» und «odbc.ini» erstellt. Für Windows existiert hier eine GUI, die bei der Erstellung helfen soll. Dort scheint es dann aber vor zu kommen, dass für LibreOffice nicht nur die existierenden eingetragenen Datenquellen angeboten werden, sondern auch leere Datenquellen.

Auf die Erstellung von ODBC-Verbindungen unter Windows kann hier nicht weiter Bezug genommen werden, da zum einen mehrere Treiber existieren, die GUI zu viele Einstellungsmöglichkeiten lässt (die einer GUI als Allroundwerkzeug geschuldet sind) und außerdem mir als Autor das Betriebssystem nicht zur Verfügung steht.

MySQL/MariaDB-Datenbanken

MySQL-Datenbanken oder auch MariaDB-Datenbanken können auf drei verschiedene Weisen mit Base verbunden werden. Die einfachste und schnellste Art ist die direkte Verbindung mit dem MySQL-Connector. Daneben steht noch die Verbindung über JDBC und ODBC zur Verfügung.

Hinweis

In MySQL und MariaDB ist es möglich, Daten in Tabellen ohne ein Primärschlüsselfeld einzugeben und zu ändern. Die GUI von Base zeigt diese Tabellen zwar an, bietet aber keine Eingabe- bzw. Änderungsmöglichkeit.

Wer Tabellen ohne Primärschlüssel verwenden möchte, kann stattdessen über Extras → SQL, oder innerhalb von Formularen über Makros, die Tabellen mit Daten versorgen.

Erstellen eines Nutzers und einer Datenbank

Nachdem MySQL bzw. MariaDB installiert ist, sollten nacheinander die folgenden Schritte vollzogen werden:

  1. 1.Der Administrationsuser in MySQL heißt «root». Für Linuxnutzer ist hier wichtig, dass es sich dabei nicht um den Administrator des Linuxsystems handelt. Diesem Nutzer wird direkt nach der Installation erst einmal ein Passwort zugewiesen. Dies kann je nach System auch schon vorher bei der Installation erfolgt sein. In der Konsole wird nach der Anmeldung als «sudo»
    mysql -u root -p
    eingegeben. Am Anfang ist kein Passwort vorhanden, so dass bei der Eingabeaufforderung auch nur
    Enter gedrückt wird. Gegebenenfalls muss -p für die Passworteingabe auch weg gelassen werden.
    Es erscheint die Eingabeaufforderung
    mysql>
    Alle folgenden Eingaben werden jetzt auf dieser mysql-Konsole erstellt. Die Passwörter können sich unterscheiden, je nachdem, ob die Anmeldung von dem momentanen Rechner («localhost») oder von einem anderen Rechner zum MySQL-Serverrechner («host») erfolgt.
    SET PASSWORD FOR root@localhost=PASSWORD('Passwort');
    SET PASSWORD FOR root@host=PASSWORD('Passwort');
    Windows-Nutzer geben statt der zweiten Zeile
    SET PASSWORD FOR root@'%'=PASSWORD('Passwort');
    ein. 

  2. 2.Als Sicherheitsmaßnahme werden alle eventuell bestehenden anonymen Nutzer gelöscht.
    DELETE FROM mysql.user WHERE User='';
    DELETE FROM mysql.db WHERE User='';
    FLUSH PRIVILEGES;
     

  3. 3.Eine Datenbank mit dem Namen «libretest» wird erstellt.
    CREATE DATABASE libretest; 

  4. 4.Alle Rechte an der Datenbank «libretest» werden dem Nutzer «lotest» übergeben, der sich durch das Passwort «libre» ausweisen soll.
    GRANT ALL ON libretest.* TO lotest IDENTIFIED BY 'libre'; 

Damit ist die Datenbank vorhanden, mit der die folgenden Verbindungen aufgebaut werden.

Direkte Verbindung zu MySQL/MariaDB

Für die MariaDB und die MySQL-Datenbank existiert eine direkte Verbindung mit Base. Diese Verbindung funktioniert auf jeden Fall mit der MariaDB, eventuell aber nicht einwandfrei mit neueren Versionen von MySQL ab Version MySQL 8. Das liegt daran, dass aus Lizenzgründen vom MySQL-C++-Verbinder zum MariaDB-C-Verbinder gewechselt wurde. Der MariaDB-C-Verbinder steht unter der LGPL-Lizenz, die kompatibel zu der LibreOffice-Lizenz ist.1

Für MySQL-Versionen ab MySQL 8 sollte daher eher eine JDBC oder ODBC-Verbindung genutzt werden.

MySQL/MariaDB-Verbindung über JDBC

Als allgemeiner Zugang zu MySQL ist der Zugang über JDBC oder ODBC zu wählen. Um den JDBC-Zugang nutzen zu können, wird der mysql-connector-java.jar in der jeweils zur Datenbank passenden Fassung benötigt. Für MySQL kann das entsprechende Paket, das diesen Connector enthält, hier herunter geladen werden: https://dev.mysql.com/downloads/connector/j/ . Dieses Java-Archiv wird am besten in das Verzeichnis kopiert, aus dem auch die aktuelle Java-Version von LibreOffice geladen wird. Als Speicherort bietet sich das Unterverzeichnis «...Javapfad.../lib/ext/» an. In Linux-Systemen wird dies durch die Softwareverwaltung oft automatisch erledigt.

Für eine Nutzung durch lediglich einen Benutzer kann der connector allerdings auch einfach irgendwo im Benutzerverzeichnis liegen. Dann ist allerdings notwendig, den Class Path anzugeben.

Gegebenenfalls kann das Java-Archiv auch separat über Extras → Optionen → LibreOffice → Erweitert → Java Optionen→ Class Path in den Class-Path aus jeder beliebigen Stelle der Festplatte übernommen werden. Für diese Option sind dann auch keine Systemverwalterrechte notwendig.

 

Über Class Path → Archiv hinzufügen… wird die zu der Datenbank passende *.jar-Datei gesucht und in LibreOffice eingebunden.

Der Treiber wird bis Version 5.1 mit com.mysql.jdbc.Driver angesprochen. Neuere Treiber benötigen den Eintrag com.mysql.cj.jdbc.Driver.

Für die MariaDB bietet sich der JDBC-Treiber von https://downloads.mariadb.com/Connectors/java/ an. Der Treiber kann ebenso in den Class-Pfad eingebunden werden und wird mit org.mariadb.jdbc.Driver angesprochen.

MySQL/MariaDB-Verbindung über ODBC

Für eine Verbindung über ODBC muss natürlich erst einmal die entsprechende ODBC-Software installiert sein. Details dazu werden hier nicht weiter beschrieben.

Nach Installation der entsprechenden Software kann es passieren, dass LO den Dienst verweigert, weil es die libodbc.so.1 nicht findet. Hier existiert in den meisten Systemen inzwischen die lib­odbc.so.2 . Auf diese Datei muss ein entsprechender Verweis mit dem Namen libodbc.so.1 in dem gleichen Verzeichnis abgespeichert werden.

In den für das System notwendigen Dateien odbcinst.ini und odbc.ini müssen Einträge ähnlich den folgenden existieren:

odbcinst.ini
  1. 001 [MySQL] 

  2. 002 Description = ODBC Driver for MySQL 

  3. 003 Driver = /usr/lib64/libmyodbc5.so 

odbc.ini
  1. 001 [MySQL-test] 

  2. 002 Description = MySQL database test 

  3. 003 Driver = MySQL 

  4. 004 Server = localhost 

  5. 005 Database = libretest 

  6. 006 Port = 3306 

  7. 007 Socket = 

  8. 008 Option = 3 

  9. 009 Charset = UTF8 

Diese beiden Dateien liegen bei einem Linux-System im Verzeichnis /etc/unixODBC. Ohne den Eintrag zur Art des verwendeten Zeichensatzes kommt es bei Umlauten zu Problemen, auch wenn die Einstellungen in MySQL/MariaDB und Base übereinstimmen.

Details zu den Verbindungsparametern sind im MySQL-Referenzhandbuch zu finden.

Verbindung zur MySQL-Datenbank über den Datenbank-Assistenten

Der Zugriff auf eine existierende MySQL-Datenbank erfolgt mit der direkten Verbindung in den folgenden Schritten:

 

Über «Neue Datenbank erstellen» ist nur die Erstellung einer Datenbank im internen HSQLDB-Format möglich. Die Zusammenarbeit mit anderen Datenbanken kann nur erfolgen, wenn die Datenbank selbst bereits existiert. Dazu muss also Verbindung zu einer bestehenden Datenbank herstellen gewählt werden.

 

Hier wird aus den, teilweise betriebssystemspezifischen, Datenbanken die MySQL-Variante ausgewählt.

Die direkte Verbindung
 

Die direkte Verbindung ist diejenige, die von der Geschwindigkeit her für die MariaDB am besten gewählt werden sollte. Allerdings hat sie auch ein paar kleine Bugs, die gegebenenfalls besonders berücksichtigt werden müssen. So ist es z. B. dringend erforderlich, in Formularen bei Textfeldern die maximale Länge einzustellen, weil sonst die Eingabe einfach auf den bisher maximal eingegebenen Wert gekürzt wird.

 

Der Datenbankname muss bekannt sein. Befindet sich der Server auf dem gleichen Rechner wie die Benutzeroberfläche, unter der die Datenbank erstellt wird, so kann als Server «localhost» gewählt werden. Ansonsten kann die IP-Adresse (z.B. 192.168.0.1) oder auch je nach Netzwerkstruktur der Rechnername oder gar eine Internetadresse angegeben werden. Es ist also ohne weiteres möglich, mit Base auf die Datenbank zuzugreifen, die vielleicht auf der eigenen Homepage bei irgendeinem Provider liegt.

 

Alternativ zu den Serverangaben kann (unter Linux) auch direkt der Socket eingegeben werden. Der Standardsocket kann dafür aus der Datei /etc/my.cnf ausgelesen werden.

Auch der Socket benötigt einen laufenden MariaDB/MySQL-Server. Es ist also nicht möglich, ohne gestarteten Server auf die Datenbanken in dem Server zuzugreifen. Auch die Nutzung einer anderen Instanz als der des systemweiten Servers ist nicht möglich.

Bei der Arbeit mit Base über das Internet sollte sich der Nutzer allerdings darüber bewusst sein, wie seine Verbindung zu der Datenbank gestaltet ist. Gibt es eine verschlüsselte Verbindung? Wie erfolgt die Passwortübertragung?

 

Jede über das Netz erreichbare Datenbank sollte mit einem Benutzernamen und einem Kennwort geschützt sein. Hier wird direkt getestet, ob die Verbindung klappt. Wichtig ist natürlich, dass der entsprechende Benutzer in MySQL bzw. der MariaDB entsprechend für den benannten Server eingerichtet wurde.

 

Dieses Fenster erscheint anschließend bei jedem Start der Datenbankdatei, wenn das erste Mal auf die MySQL-Datenbank zugegriffen wird.

Der Verbindungstest startet die Authentifizierung mit vorgegebenem Benutzernamen. Nach Passworteingabe erfolgt die Meldung, ob die Verbindung erfolgreich hergestellt werden kann.
Läuft z.B. MySQL zur Zeit nicht, so kommt natürlich an dieser Stelle eine Fehlermeldung.

 
 

Auch hier wird die Datenbank nicht angemeldet, da sie nur zu ersten Tests aufgebaut wurde. Eine Anmeldung ist erst notwendig, wenn andere Programme wie z.B. der Writer für einen Serienbrief auf die Daten zugreifen sollen.

Der Assistent beendet die Verbindungserstellung mit dem Abspeichern der gewünschten Datenbankverbindung. In dieser *.odb-Datei liegen jetzt lediglich diese Verbindungsinformationen, die bei jedem Datenbankstart ausgelesen werden, so dass auf die Tabellen der MySQL-Datenbank zugegriffen werden kann.

 

Ansicht der geöffneten Datenbankdatei mit Tabellenübersicht und in der Fußzeile der Benennung des verwendeten Treibers «MySQL (nativ)», des Datenbanknamens «libretest», des Nutzers der Datenbank «lotest» und des Servers, auf dem die Datenbank läuft, nämlich «localhost».

 

Über Fertigstellen wird die Base-Datei erstellt und die Ansicht auf die Tabellen der MySQL-Datenbank geöffnet. Die Tabellen der Datenbank werden unter dem Namen der Datenbank selbst aufgeführt.

Beim manchen Treibern wird nur die Datenbank «libretest» angezeigt, für die auch die Verbindung bestimmt war. Andere Treiber von LO bieten auch andere MySQL- bzw. MariaDB-Datenbanken auf dem gleichen Server zur Auswahl, für die der Nutzer mindestens eine Leseberechtigung hat.

Auch mit den Treibern für nur eine Datenbank ist aber ein Zugriff auf die anderen Tabellen z.B. für Abfragen möglich, sofern natürlich der angegebene Datenbanknutzer, im obigen Fall also «lotest», mit seinem Passwort auf die Daten zugreifen kann. Im Gegensatz zu den bisherigen nativen LO-Treibern ist hier allerdings kein schreibender Zugriff auf andere Datenbanken des gleichen MySQL-Datenbankservers möglich.

Im Unterschied zu der internen Datenbank von Base taucht bei Abfragen entsprechend in MySQL für die Definition der Tabelle immer auch der Datenbankname auf, hier z.B.

  1. 001 ... FROM "libretest"."Klasse" AS "Klasse" ... 

Hier ist es also auf jeden Fall notwendig, der Kombination aus Datenbankname und Tabellenname mit dem Zusatz «AS» einen alternativen Alias-Namen zuzuweisen. Genaueres siehe dazu in dem Kapitel «Verwendung eines Alias in Abfragen».

Hinweis

Durch diese Aliaszuweisung werden Abfragen, die aus mehreren Tabellen bestehen, nicht mehr editierbar, auch wenn alle anderen Bedingungen erfüllt sind. Dann muss in der durch die GUI erstellten Abfrage im SQL-Code "libretest"."Klasse" AS (also der Hinweis auf den Datenbanknamen) entfernt werden. Dann gelingt auch eine bearbeitbare Abfrage über mehrere Tabellen.

Tabellen können in der Datenbank erstellt und gelöscht werden. Automatisch hoch zählende Zahlenfelder («Autowert») funktionieren und lassen sich auch bei der Tabellenerstellung auswählen. Sie starten bei MySQL mit dem Wert '1'.

Die ODBC-Verbindung

Die ersten Schritte zur ODBC-Verbindung sind gleich denen zur direkten Verbindung. Wird beim zweiten Schritt dann die ODBC-Verbindung für MySQL gewählt, dann erscheint das folgende Fenster des Datenbank-Assistenten:

 

Die ODBC Datenquelle hat nicht unbedingt den gleichen Namen wie die Datenbank in MySQL selbst. Hier muss der Name eingetragen werden, der auch in der Datei «odbc.ini» steht. Die einfachste Möglichkeit besteht hier darin, über den Button Durchsuchen den Namen aus der «odbc.ini» direkt auszulesen.

 

Beim Test erscheint der Name aus der «odbc.ini». Auch wenn hier wieder nur mit einer Datenbank verknüpft wird, können andere Tabellen des MySQL-Servers sehr wohl gelesen werden.

Schritt 4 und 5 laufen wieder identisch zur Direktverbindung ab.

Die JDBC-Verbindung

Auch bei der JDBC-Verbindung sind die ersten Schritte gleich, hier unterscheidet sich wieder nur Schritt 3 von den anderen Schritten des Assistenten:

 

Der Assistent fragt hier die gleichen Informationen ab wie bei der direkten Verbindung. Der Datenbankname ist der, der auch in MySQL selbst verwandt wird.

Über «Klasse testen» wird überprüft, ob das Archiv mysql-connector-java.jar über Java erreichbar ist. Entweder muss dieses Archiv im Pfad der ausgewählten Java-Version liegen oder direkt in LibreOffice eingebunden werden.

 

Alle weiteren Schritte sind wieder identisch zu denen der vorherigen Verbindungen. Die Verbindungen zu anderen Datenbanken des gleichen MySQL-Datenbankservers funktionieren ebenfalls nur lesend.

Hinweis

Bei Verwendung des MariaDB-Treibers muss die JDBC-Treiberklasse mit «org.mariadb.jdbc.Driver» angegeben werden.

Für MySQL wird in neueren Version nach der Version 5 die JDBC-Treiberklasse «com.mysql.cj.jdbc.Driver» benötigt.

Hinweis

Der JDBC-Zugang mit MySQL/MariaDB kann auch direkt über die Auswahl JDBC statt des Untermenüs MySQL → JDBC erfolgen. Dies kann besonders dann sinnvoll sein, wenn dem Treiber Parameter mitgegeben werden sollen.

Ohne Parameter trennt z.B. der JDBC-Treiber wie auch der direkte Treiber zu einer MySQL-Datenquelle im Internet nach recht kurzen Pausenzeiten die Verbindung. Mit der folgenden Einstellung wird dies vermieden:

  1. 001 jdbc:mysql://«Host der Datenbank»:3306/«Datenbankname»?autoReconnect=true 

Bei neueren Treibern (ab Version 8.*) für MySQL ist die Verbindung wegen einer Zeitzoneneinstellung nur über die Angabe von Parametern möglich, wenn nicht Servereinstellungen beeinflusst werden können:

  1. 001 jdbc:mysql://localhost/«Datenbankname»?autoReconnect=true&useUnicode=true&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=UTC 

Dies bietet alle erforderlichen Einstellungen, zusätzlich auch noch die Einstellung des Zeichensatzes.

Eine Übersicht aller Einstellungen bietet https://dev.mysql.com/doc/connector-j/5.1/en/connector-j-reference-configuration-properties.html#connector-j-reference-set-config

Verbindung zu MySQL/MariaDB über das Internet

Die verschiedenen Verbindungen zu MySQL/MariaDB wurden oben jeweils mit der Beziehung zum örtlichen Server «localhost» getestet. Sie funktionieren grundsätzlich auch als Verbindungen zu Datenbanken eines Providers im Internet. Allerdings ist hier zu beachten, dass der Server des Providers für Kontakte von außerhalb ein wait_timeout eingestellt haben kann. Nach einer entsprechenden Zeit ohne Datenaustausch wird dann die Verbindung unterbrochen. Je nach Einstellung des Servers kann es erlaubt sein, diese Zeitspanne zu beeinflussen.

  1. 001 SHOW SESSION VARIABLES LIKE 'wait_timeout'; 

  2. 002 SET SESSION wait_timeout=600; 

Zuerst wird die Einstellung des Servers über Extras → SQL ermittelt. Die Standardeinstellung eines Servers ohne entsprechende Konfiguration liegt bei 28800 Sekunden, also 8 Stunden. Ist dies nicht der Fall, dann kann für die Session eine Zeitspanne (hier: 600 Sekunden oder 10 Minuten) eingegeben werden. Sobald in dieser Zeit wieder eine Abfrage läuft wird die Zeitspanne bis zur nächsten Unterbrechung wieder auf 10 Minuten gesetzt.

Ist die Einstellung der Zeitspanne nicht möglich, so hilft das folgende Makro:

  1. 001 GLOBAL boStop AS BOOLEAN 

     

  2. 001 SUB Reconnect 

  3. 002    DIM oDatasource AS OBJECT 

  4. 003    DIM oConnection AS OBJECT 

  5. 004    DIM oSQL_Command AS OBJECT 

  6. 005    boStop = false 

  7. 006    DO 

  8. 007       WAIT 30000 'Zeitangabe in Millisekunden 

  9. 008       oDatasource = thisDatabaseDocument.CurrentController 

  10. 009       oConnection = oDatasource.ActiveConnection() 

  11. 010       oSQL_Command = oConnection.createStatement() 

  12. 011       oSQL_Command.executeQuery("SELECT NOW()") 

  13. 012    LOOP WHILE boStop = false 

  14. 013 END SUB 

     

  15. 001 SUB StopConnect 

  16. 002    boStop = true 

  17. 003 END SUB 

Zuerst wird eine globale Variable erstellt, damit die Schleife in der Prozedur Reconnect auch unterbrochen werden kann. In der Prozedur wird alle 30 Sekunden eine einfache Abfrage gestellt, die nicht weiter ausgewertet wird. So bleibt der Kontakt zum Server erhalten, wenn wait_timeout größer als 30 Sekunden ist und die Netzverbindung einwandfrei funktioniert. Die Einstellung der Zeitspanne ist hier dem Test überlassen. Mit der Prozedur StopConnect schließlich lässt sich die Prozedur Reconnect wieder unterbrechen.

Wird dieses Makro mit dem Öffnen der Datenbank aufgerufen, so muss natürlich innerhalb der ersten 30 Sekunden auf jeden Fall der erste Kontakt zur Datenbank mit Passworteingabe hergestellt werden.

Bei der JDBC-Verbindung lässt sich hier mit dem Parameter autoReconnect=true eine Verbindung direkt wieder herstellen. Die erste Unterbrechung findet dann trotzdem statt, bei einem zweiten Kontaktversuch ist die Verbindung aber wieder da.

Bei der direkten Verbindung funktioniert das nicht. Stattdessen muss die Datenbankdatei geschlossen und wieder geöffnet werden um erneut einen Kontakt herzustellen. Die Verbindungsdaten wie Nutzername und Passwort müssen aber nicht neu eingegeben werden, solange LibreOffice selbst nicht beendet wird..

Zugriff auf gespeicherte Prozeduren in MySQL/MariaDB

Auf dem Datenbankserver können neben Tabellen und Ansichten auch Prozeduren gespeichert werden. Werden diese Prozeduren direkt auf der Konsole von MySQL aufgerufen, so können dort zum Teil Tabellenansichten ähnlich einer sonst in Base sichtbaren Ansicht («View») abgerufen werden. In Base sind diese Tabellenansichten nicht sichtbar. Ein Aufruf der Prozeduren unter Extras → SQL ist problemlos möglich, nur erfolgt leider keine Ausgabe der anzuzeigenden Inhalte. Um Inhalte der gespeicherten Prozeduren («Stored Procedures») zu sehen kann der folgende Weg beschritten werden:

Die Abfrage funktioniert nur dann einwandfrei, bei der Erstellung der Prozedur auch die Datenbank (in diesem Fall "libretest") mit angegeben wird. Wie das Ganze etwas besser automatisiert ablaufen kann ist im Kapitel «MySQL-Datenbank mit Makros ansprechen» beschrieben.

PostgreSQL

Für die PostgreSQL-Datenbank gibt es wie bei MySQL/MariaDB einen direkten Treiber von LO, der von vornherein mit installiert wird. Damit der Kontakt auch sicher passt, zuerst aber eine kurze Anleitung zu den ersten Schritten nach der Installation von PostgreSQL.

Erstellen eines Nutzers und einer Datenbank

Die folgenden Schritte sind nach einer Installation über den Paketmanager in OpenSUSE erforderlich. Sie ähneln vermutlich denen unter anderen Betriebssystemen.

  1. 1.Dem Nutzer «postgres» muss zuerst ein Passwort zugewiesen werden. Das kann mit dem Administrationstool des Betriebssystems erfolgen. 

  2. 2.Der PostgreSQL-Server muss vom Administrator gestartet werden, z. B. service postgresql start oder rcpostgresql start. 

  3. 3.Der Nutzer «postgres» muss sich mit
    su postgres
    auf der Konsole anmelden.
     

  4. 4.Ein einfacher Datenbanknutzer, hier «lotest», sollte mit Passwortzugang erstellt werden:
    createuser -P lotest 

  5. 5.Damit der Datenbanknutzer anschließend auch auf die zu gründende Datenbank zugreifen kann, muss in der Datei /var/lib/pgsql/data/pg_hba.conf ein Eintrag geändert werden. In dieser Datei werden u.a. die Methoden zur Identifizierung der Nutzer auf verschiedenen Ebenen festgelegt. Die Methode, mit der LO-Base kommunizieren kann, ist die Methode «password» oder «md5», nicht, wie voreingestellt, die Methode «ident». 

  6. 6.Der Systemnutzer «postgres» meldet sich über «psql» an:
    psql -d template1 -U postgres 

  7. 7.Der Systemnutzer «postgres» erstellt die Datenbank «libretest»:
    CREATE DATABASE libretest; 

Der Nutzer «lotest» hat nicht die gleichen Rechte wie der Nutzer «postgres». Meldet sich der Nutzer «postgres» direkt beim System über su postgres an, so kann er beispielsweise zusätzliche Schemas für eine Datenbank erstellen:

  1. 1.Der Systemnutzer «postgres» meldet sich über «psql» an:
    psql -d libretest -U postgres 

  2. 2.Der Systemnutzer «postgres» erstellt das Schema «reports»:
    CREATE SCHEMA reports; 

  3. 3.Der Systemnutzer «postgres» setzt den Nutzer «lotest» als Eigentümer für das Schema ein:
    ALTER SCHEMA reports OWNER TO lotest; 

Der Nutzer «lotest» kann jetzt auf dieses Schema zugreifen. Allerdings erscheint es nicht direkt in der Übersicht. Wird aber über die GUI in Base eine Tabelle erstellt, so kann diese in dem Schema «reports» gespeichert werden und anschließend wird das Schema auch in der Liste der Tabellen angezeigt.

Direkte Verbindung zu PostgreSQL

Im Assistenten wird der Eintrag «postgres» ausgewählt. Die Verbindungseinstellung geschieht über die Angabe des Datenbanknamens («dbname») und des Hostes. Unter bestimmten Umständen ist es erforderlich, statt der einfachen Angabe eines Hostes den kompletten Host einschließlich des vollständigen Domainnamens anzugeben. Gegebenenfalls muss auch noch separat «port=5432» hinzugefügt werden. Dies sollte aber nur notwendig sein, wenn ein anderer als der Standardport gewählt wird.

 

Die Benutzer-Authentifizierung sieht genauso aus wie die unter MySQL. Neben «dbname» und «host» können hier noch «port», «connect_timeout» und andere Einträge erstellt werden.

Wird die Datenbank das erste Mal geöffnet, so erscheinen für den User erst einmal eine Unmenge an Tabellen aus dem Bereich «information_schema». Diese Tabellen sind ebenso wie die im Bereich «pg_catalog» für den normalen Nutzer nur lesbar, nicht schreibbar. Diese verschiedenen Bereiche bezeichnet PostgreSQL als «Schema». Der Nutzer legt neue Tabellen im Schema «public» an.