OpenOffice, Lazarus, ODBC, MySQL und andere Wirrungen

warning: fread(): Length parameter must be greater than 0 in /var/www/elchs-kramkiste.de/lapurd/includes/common.inc(1695) : eval()'d code on line 19.

MySQL, SQL bzw. ODBC mit OpenOffice, Lazarus und so weiter...

Ziel war die Datenbank gestützte Anwendung eines privaten Inventarverzeichnisses. Hierbei wollte ich aber nicht die MS-Programme (MS-SQL oder Access) nutzen, sondern "freie" Programme. Mein Auge fiel daher zunächst auf OpenOffice. Installiert hatte ich dies in der Version 2.0.1. Da ich aber schon relativ früh in OO-Base auf Grenzen des Formulargenerators stieß, versuchte ich es mit einem Update auf die Version OOo 2.1. Dabei traten schon Probleme mit der Erstellung von Tabellen auf, denen ich einfach keinen "Primary-Key" mit der Eigenschaft "autoincrement" zuordnen konnte. Beim Abspeichern der mit Vers. 2.1 erstellten Tabellen kam es zu Fehlermeldungen und die Tabellen mit den Primary-Keys ließen sich nicht erstellen.

Als nächstes installierte ich dann auf einem Kubuntu 6.06-System einen MySQL-Dienst.

Auf diese MySQL-Datenbanken griff ich dann mit OOo 2.1.0 per ODBC-Konnektor von meinem PC (XP Prof., SP 2) aus zu. Jedesmal, wenn ich OO-Base neu startete und mich zu den MySQL-DBs verbinden wollte, wurde - nachdem OO 2.1 sich ohne Fehlermeldung selbst beendete (abstürzte ?) - eine OO-Base-Dokumenten-Wiederherstellung angeboten. Nach Durchführung derselben startete OO-Base durch und öffnete die bestehenden Tabellen und angelegten OO-Formulare. Das war für mich auch keine befriedigende Lösung.

Daher galt mein nächster Versuch Lazarus (Free Pascal) V. 0.9.20 Beta SVN-Rev. 10176 vom 05.11.2006 auf meinem Arbeitsplatz-PC.

Nach dem Einbinden eines Objektes vom Typ "TMySQL50Connection" und Setzen der Eigenschaft "Connected" auf True kommt es zur Meldung "libmysql.dll nicht gefunden". Laden Sie sich XAMPP herunter (die ZIP-Version für Win32), extrahieren diese und kopieren Sie die libmysql.dll von "LW:\XAMPP-Entpackverzeichnis\xampp\mysql\bin" nach "LW:\Windows\System32". Danach klappt es auch mit dem Connected = True. Diese DLL unterstützt aber "nur" MySQL ab Version 5, auf meinem Kubuntu-Server lief aber MySQL V. 4.X. Leider kam ich mit Lazarus nur soweit, dass ich die Datenbank konnektieren konnte (Connected = True), nicht aber auf die darin enthaltenen Tabellen, geschweige denn die Tabellenfelder zugreifen konnte. Auch Versuche mit einer älteren libmysql.dll führten zu keinem Connect-Erfolg (TMySQL40Connection can not work with the installed MySQL client version (4.1.1-alpha)). Lazarus bzw. die MySQL-Connections daraus verlangen meiner Einschätzung nach eine sehr gut aufeinander abgestimmte MySQL-Server und -Client incl. libmysql.dll Version, sonst läuft da gar nichts.

Also kehrte ich erst einmal zu OOo 2.1 zurück, denn ich wollte voran kommen. Zumal ich mittlerweile fstgestellt hatte, dass die o.a. Abstürze mit Dokumenten-Wiederherstellung auf einem Kubuntu-6.10 (Edgy Eft) Desktop-System mit einem OOo 2.1 nicht auftraten (solange man die *.odb direkt aus dem Konqueror (oder andere Datei-Manager) startete und nicht aus OOo-Base heraus öffnete). Da ging dann vorher nur wieder die Suche nach Infos zur Installation und Konfiguration des ODBC- / MySQL-Clients für den Zugriff auf den MySQL-Server los (http://de.openoffice.org/doc/howto_2_0/base/ooomysql.html dient hier als Einstieg für diese Thematik).

Anmerkung: Unter Windows XP trat der oben beschriebene Fehler (OO-Base-Absturz mit Wiederherstellung) auch nicht auf, wenn man die *.odb aus dem Explorer heraus startete, statt sie in OO-Base zu laden.

Noch eine Anmerkung: Nachdem ich mich langsam an die Funktionalitäten von OO-Base in Verbindung mit MySQL/ODBS herantaste, habe ich festgestellt, dass sich mit OO-Base keine neuen MySQL-Tabellen erstellen lassen (Programm hängt beim abspeichern, kann nur per "kill -9 Prozess-ID" beendet werden). Ist aber kein Beinbruch, denn wofür gibt es phpMyAdmin (ist auch komfortabler bzw. flexibler) ;-)

Das Speichern von geänderten OOBase-Formularen in der Entwurfsansicht ist übrigens nur die halbe Miete. Wenn mir der Entwurfsgenerator (unter Windows bisher nur) bei neuen Formularen mal abschmiert / abstürzt, dann wird beim nächsten Zugriff auf die *.odb eine zweite Entwurfsdatei zur Wiederherstellung angeboten. Ich habe die Haupt-ODB-Datei restaurieren lassen und der neue Entwurf war im Nirwana verschwunden, also alles wieder von vorne :-( . Man sollte daher das Abspeichern von Änderungen auch immer im OOBase-Hauptfenster (aus dem man den Formulargenerator aufgerufen hat) durchführen, denn sicher ist sicher...

Wenn nach dem Transferieren einer OOo-odb-Datei in ein anderes Netzwerk / LAN (mit anderem SQL-Server) oder PC mit anderen MySQL-Treibern beim Aufrufen der Tabellen oder erstellten Formulare gemeldet wird, dass keine Tabelle XYZ existiert, die Verbindung zur konfigurierten ODBC-System-DSN unter Arbeitsplatz/Systemsteuerung/Verwaltung aber funktioniert, dann müssen Sie in [b]allen[/b] Formularen einen Rechtsklick auf ein beliebiges Eingabefeld machen, Formular wählen und in den Eigenschaften unter Daten, Inhalt die richtige Tabelle nochmals auswählen (es ist nämlich wohl nur noch der Tabellenname ohne vorangestellten Datenbanknamen eingetragen).
Ursache: DB-Verbindungen in MySQL-ODBC Vers. 2.5 werden in der Form "Datenbank.Tabelle" und in MySQL-ODBC Vers. 3.5 in der Form "Tabelle" gespeichert