Thema: OA II/III/IV MySQL 5.1.x Plugin + ODBC
Einzelnen Beitrag anzeigen
Alt 23.10.2007, 00:11   #5
leecher
Moderator
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){
case Text:                  printf ("VARCHAR(%d)", DBObject.pFieldTable[i].wFieldSize); break;
case Number:
case ScientificNotation:    printf ("DOUBLE"); break;
case Bool:                  printf ("BOOL"); break;
case Untyped:               printf ("VARCHAR(1)"); break;   // Not supported
case Decimal:               printf ("DECIMAL"); break;
case Date:                  printf ("DATE"); break;
case Time:                  printf ("TIME"); break;
case Memo:                  printf ("TEXT"); break;
}
Folgende Schritte sind notwendig, um eine OA4-Tabelle mit MySQL lesen zu können.

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 -p
Damit ist die Tabelle in MySQL registriert.

3) Datenbank wie von MySQL gewohnt verwenden.

Ich habe heute testweise über ODBC eine OA4-Datenbank in Excel importiert, das hat ansich funktioniert.
leecher ist offline   Mit Zitat antworten