|
MySQL 5.1.x Plugin + ODBC
EDIT: Für diesen Thread gilt - die Informationen sind chronologisch nach Entwicklungsstand - somit ist am Ende jeweils die neueste Info zu lesen :-)
Um auf die .DF Datenbanken mithilfe eines Webservers zuzugreifen benötigt man abgesehen von der Extension nur wenige Zeilen Code. Grundsätzlich wäre es aber natürlich (so wie in unserem Fall) sinnvoll den Server möglichst am selben Standort zu betreiben. Die Extension erlaubt den Zugriff auch auf vom Dateisystem gesperrte Datenbanken während der Laufzeit da wir mit entsprechend hohen Rechten arbeiten. Sofern auf ihrem Server Gruppenrichtlinien eingerichtet sind benötigt die DLL resp. der entprechende Webserver zumnindest Backup Privilegien. Hier ein Beispiel wie wir es verwenden: Code:
//*==================== Neue Abfrage aus OA4 ==================*\ |
|
PHP Zugriff auf Open Access - Vorteile & Nutzen...
Liste der Anhänge anzeigen (Anzahl: 2)
Oft werde ich gefragt wozu man diese Schnittstelle überhaupt brauchen kann. Wer Open Access kennt und selber schon programmiert hat wird mir zustimmen, dass es bisher nichts gibt was punkto Bedienung, Geschwindigkeit, Benutzerfreundlichkeit und Stabilität diesem tollen Programm nahe kommt. Natürlich gibt es unzählige Programme die unter Windows laufen und viele tolle Sachen können aber hier ist nun mal OA4 oft unschlagbar, weil man vielleicht so wie ich mit der Tastatur arbeiten will, keine bunten blinkenden Icons will oder nach einer Neuinstallation nicht stundenlang ohne Datenbank dastehen will. EINFACH und SCHNELL soll es sein.
Was kann man nun genau mit der PHP Geschichte machen. Ganz einfach - die Daten über genau diese Schnittstelle abfragen und zwar so schnell wie es OA4 auch kann. Das bringt natürlich nur jemandem etwas, der auch mit anderen Interpretern wie PHP umgehen kann und noch dazu vielleicht einen dedizierten Server besitzt der vielleicht auch noch gleich um die Ecke im Serverraum steht. Keine Frage, nicht jeder hat soetwas, aber selbst als Privatperson kann man um wenig Geld seinen eigenen Webserver zu Hause stehen haben. Das Ganze kann dann natürlich auch Lokal als Intranetanwendung laufen. Ein Beispiel aus der Praxis. Rainer hat eine Webseite für einen privaten Jugend Fussballverein. Die Daten der Spiele gibt er über eine OA4 Datenbank ein und benützt dabei gerade einmal die Standard Pflege. Irgendwann wollte sein Verein auch eine Homepage. Auf der sollen nun auch die aktuellen Spiele aufgelistet werden - natürlich könnte Rainer seine Daten täglich exportieren und vielleicht auch in eine andere Datenbank übertragen aber irgendwie läuft OA4 auch auf einem USB Stick und er kann es überall hin mitnehmen. Jetzt wäre es noch schön wenn er gerade nach dem Spiel die Datenbank einfach irgendwo hochlädt und schwupps sind die Daten aktuell im Netz. Was haben wir nun gemacht.... Rainer spielt seine Datenbank über ein Upload Formular einfach auf unseren Rechner und bindet das PHP Script welches wir extra dafür gescrieben haben auf seine Homepage ein. Nun wollen wir natürlich nicht eure Datenbanken hosten sondern eigentlich solltet ihr euch den Kopf zerbrechen wie ihr das ganze selber verwenden könnt. Und wenn ihr nun eine Firma seid so wie wir, die OA4 benützen und weiterhin benützen werden, dann werden euch plötzlich unzählige Möglichkeiten einfallen wie man OA4 nun wieder in das tägliche Geschäft einbinden kann ohne dass man dauernd über die Kompatibilität nachdenken muss (zb. kann OA4 den Drucker überhaupt verwenden, etc.) http://www.spvgg-gw.de/jugend/hauptseite/html/aktuelle_woche.html |
|
Liste der Anhänge anzeigen (Anzahl: 1)
|
|
OA4 Plugin für MySQL 5.1.x + ODBC
Vorab: Man benötigt MYSQL ab Version 5.1.x !
Wichtig (kleiner Nachteil): Die über MySQL zu verwendeten open Access Datenbanken müssen jeweils in der aktuellen Open Access Struktur (also Feldanzahl und Reihenfolge) in MySQL angelegt sein. Bei einer Datenbankänderung in Open Access muss man daher die entsprechende MySQL Datenbank löschen und neu anlegen - es handelt sich hierbei jedoch nur um die Datenbankstruktur; im MySQL selber werden keine Daten gespeichert. Das Programm welches die Open Access Datenbankstruktur analysiert und gleich das passendende SQL Statement ausgibt (welches man zum Anlegen in MySQL braucht) wird ebenfalls gleich mit dazugeliefert. Seit MySQL Versionen 5 ist es möglich, seine eigene Storage-Engine zu implementieren. Das bedeutet, dass die komplette Ein/Ausgabe in Datenbankdateien selbst gesteuert werden kann. Für unseren OpenAccess-Treiber eröffnen sich daduch völlig neue Möglichkeiten. Einerseits steht mit MySQL ein kompletter SQL-Parser samt Optimizer zur Verfügung, andererseits verfügt MySQL über eine sehr gute Infrastrutkur zur Ansteuern aus anderen Datenbankprodukten heraus (Stichwort ODBC und APIs für alle möglichen Programmiersprachen). Wir sind nun dabei, unseren Treiber als Storage Engine für Open Access in MySQL zu integrieren, damit man dadurch auch komplexere Anfragen über das gewohnte MySQL-Interface aus vielen Standard-Umgebungen heraus durchführen kann. Derzeit ist der Treiber noch read-only, INSERT und UPDATE werden aber ebenfalls implementiert werden (allerdings unterliegt dies den bekannten Treiber-Einschränkungen - sprich der Binärbaum im .IF file wird nicht aktualisiert und das File somit ungültig. Für komplexere Abfragen stellt diese Entwicklung jedoch einen großen Fortschritt dar. Wir halten Euch auf dem Laufenden... |
|
Soda, nun funktionieren auch INSERT/UPDATE/DELETE.
Leider habe ich es noch nicht zusammengebracht, MySQL unter Windows zu kompilieren, daher läuft das Ganze vorerst nur unter Linux. Falls jemand Interesse an dieser Lösung hat und sie für MySQL für Windows benötigt, werde ich versuchen, ob ich MySQL auch unter Windows zum kompilieren bringe. Hier eine kurze Beschreibung, wie das Ganze realisiert wurde: Grundsätzlich wurde ein MySQL einfach eine neue Storage Engine hineinkompiliert, welche OA4DB heißt. Die Funktionen zum Anlegen von Tabellen (CREATE TABLE) wurden in der Storage Engine selbst nicht implementiert. Das hat den Hintergrund, dass es primär darum geht, bestehende Tabellen zu lesen. Nachdem MySQL die Tabellenstruktur selbst in einem internen Format ablegt und pflegt, muss man MySQL die Tabellenstruktur der OA4-Datenbank bei erstmaliger Vernwedung bzw. nach Strukturänderung mitteilen, was eben über CREATE TABLE funktioniert. Um die OA4-Typen auf die jeweiligen MySQL-Typen zu mappen, habe ich ein kleines C-Programm geschrieben, welches als Eingangsparameter eine entsprechende OA4-Tabelle nimmt und das jeweilige CREATE-Statement ausgibt (muss man eventuell noch händisch anpassen, wenn z.B. spezielle Zeichen oder SQL-Schlüsselwörter im Tabellennamen vorkommen). Derzeit wird folgendes Mapping verwendet (Der Einfachheit halber hier einfach der code-Auszug): Code:
switch (DBObject.pFieldTable[i].DataType){1) Datenbank anlegen. Sofern noch nicht getan, muss eine Datenbank angelegt werden, in die die OA4-Tabellen abgestellt werden, nennen wir sie z.B. OA4: CREATE DATABASE OA4; Das Anlegen der Datenbank bewirkt, dass in /var/lib/mysql/ ein entsprechendes Unterverzeichnis mit dem Datenbanknamen angelegt wird. In diesen kopiert man die Tabellen hinein oder setzt einfach einen Symlink. 2) Man lässt über die zu importierenden Tabellen das mitgelieferte Programm drüberlaufen, welches ein entsprechendes CREATE TABLE Statement erzeugt: Code:
./oa4sql /var/lib/mysql/oa4/mydb.DF | mysql -u myuser -p3) Datenbank wie von MySQL gewohnt verwenden. Ich habe heute testweise über ODBC eine OA4-Datenbank in Excel importiert, das hat ansich funktioniert. |
|
Liste der Anhänge anzeigen (Anzahl: 1)
Hier die Installation & der Einsatz unter Windows:
1) Im my.ini muss der Plugin Pfad definiert werden: Code:
port = 3306Code:
MYSQL> install plugin oa4db soname 'oa4db.dll'Code:
MYSQL> show engines[/LEFT] |
|
So nun ist die Engine einsatzbereit und man kann beginnen seine Datenbanken für Mysql vorzubereiten.
Im mysql Verzeichnis wird eine Datenbank angelegt namens OA4DBS. Die gewünschten OA4 Datenbanken in dieses Verzeichnis kopieren und OA4SQL.EXE <Datenbank> ausführen (zB: oa4sql bene). Damit erhält den Syntax zum Anlegen der FRM Datenbank unter mysql. Das Programm könnt ihr im Anhang downloaden. Ggf. müsst ihr aber Feldnamen die Sonderzeichen enthalten anpassen (also zb. FELD#1 müsst ihr zb. in MySQL FELD1 umtaufen). Code:
CREATE TABLE IF NOT EXISTS `bene` (Code:
Verzeichnis von C: \ mysql \ data \ oa4dbs |
|
Liste der Anhänge anzeigen (Anzahl: 2)
Nun hat man die Datenbank im Mysql und kann zB. mittels PHPMYADMIN auf die Daten zugreifen oder über den gewohnten Mysql Syntax eine Abfrage formulieren.
Man muss daher nicht erst auf die PHP Extension zurückgreifen sondern kann die Infrastruktur von MySQL verwenden die ja auf vielen Servern installiert ist. Der Zugriff auf die Daten erfolgt natürlich in Echtzeit - dh. es können Daten im OA4 geflegt werden während man eine Abfrage im MYSQL fomuliert - die Datenbanken werden natürlich im Datenbankpfad von MYSQL bearbeitet und nicht mehr in dem von OA4 verwendeten Pfad. Es sollten somit die Pfade in den Applikationen entsprechend geändert werden. Wenn ihr also vorher die Daten in c:\oa4\daten hattet müsst ihr natürlich nachher die Daten nach c:\mysql\data\oa4dbs verschieben oder ihr nutzt SYMLINK. (http://www.microsoft.com/technet/sys.../Junction.mspx) Die Druckmasken, Programme etc. bleiben natürlich wo sie sind lediglich der Pfad zu den Daten wird entsprechend in den Systemeinstellungen/Suchtabelle verändert. |
|
Liste der Anhänge anzeigen (Anzahl: 2)
Einige Bildschirmfotos wie das ganze Aussieht:
|
|
Liste der Anhänge anzeigen (Anzahl: 2)
Und hier mal gleich mit UPDATE Funktion - dabei ist nun zu berücksichtigen, dass hierbei NOCH NICHT das IF geupdated wird. Spielt aber solange keine Rolle solange im OA4 keine allzukomplexen Querys abgesetzt werden. Ansonsten müsste man das IF von Zeit zu Zeit reparieren.
Bei dem Bild sind die Daten wohlgemerkt Open Access 4 Daten die nun über die MYSQL Befehle gepflegt werden können und demnach auch in der Open Access 4 Tabelle so drinstehen. |
| Alle Zeitangaben in WEZ +1. Es ist jetzt 16:51 Uhr. |
Powered by vBulletin® Version 3.8.7 (Deutsch)
Copyright ©2000 - 2024, vBulletin Solutions, Inc.