Konvertieren von MS-ACCESS nach MySQL
Christian Schnagl
- cgi
Hallo,
ich habe eine MS-ACCESS Datenbank und möchte diese via CGI-Script in eine MySQL-Datenbank einspielen. Das funktioniert auch wunderbar bei Text und Zahlen. Bei MEMO-Feldern allerdings gibts Probleme, sobald eine Zeilenschaltung vorkommt.
Die Access-Datei wurde vorher in eine ASCII-Datei exportiert (delimited mit ; )
Die Auswirkung ist schon beit folgendem (vereinfachtem) Code sichtbar:
open(LOGFILE, "<test.txt"); @test = <LOGFILE>; close LOGFILE;
foreach $line (@test)
{
@f = split(";",$line);
$sql="INSERT INTO testtab VALUES ('$f[0]','$f[1]');
print "$sql<br><br>";
}
test.txt:
satz1;memozeile1
memozeile2
satz2;memozeile1
memozeile2
DIE FRAGE:
Gibt es vielleicht eine einfachere Möglichkeit der Konvertierung oder wie kann ich verhindern, daß der Zeilenumbruch (\r\n) nicht als Satzende interpretiert wird? Die Zeilenschaltungen sollen erhalten bleiben !
Danke
Christian
Hi Christian,
grundsätzlich gibt es zwei einfachere Möglichkeiten:
1. LOAD DATA INFILE (MySQL Manual 7.15), daß die Aufgabe deines
Skripts erfüllt, und dem man Optionen für die Trennzeichen und Escape-
Zeichen übergeben kann. Mit ein wenig probieren sollte es damit gehen,
notfalls könnte man vorher die Zeilenumbrüche in einem Editor durch
passende Esacpe-Sequenzen ersetzen, vorausgesetzt, Access verwendet
verschiedene Zeichen für Zeilenumbruch im Memo-Feld und zwischen
den Zeilen.
2. die elegantere Möglichkeit ist MyODBC, ein ODBC-Treiber für
MySQL (gibt's bei www.tcx.se). Dann kann man die MySQL-Tabellen
per ODBC in Access einbinden, und die Datenbank einfach per
Anfügeabfrage übertragen.
Grüße
Stephan
- die elegantere Möglichkeit ist MyODBC, ein ODBC-Treiber für
MySQL (gibt's bei www.tcx.se). Dann kann man die MySQL-Tabellen
per ODBC in Access einbinden, und die Datenbank einfach per
Anfügeabfrage übertragen.
Mein CGI benutzt folgende Anweisung, mit der erfolgreich eine Verbindung aufgebaut werden kann:
$dbh = DBI->connect("DBI:mysql:DB240:rdbms.strato.de","www.schnagl.de","test");
#www.schnagl.de ist tatsächlich der USERNAME
Ich habe MyODBC installiert, weiß aber nicht, was ich wo eintragen muß.
Momentan habe ich folgende Werte verwendet:
Windows DSN name: DB240
MySQL host: rdbms.strato.de
MySQL database name: DB240
User: www.schnagl.de
Password: test
Vielleicht schaffst Du es, eine Verbindung aufzubauen. Mir gelang es nicht!
ICH BITTE DRINGEND UM HILFE !!
Außerdem ist der Username längenbegrenzt. Meine zweite Domain (Username) passt hier nicht rein. Lösung? Ich habe keine Rechte auf HOST, USER und DB
Danke
Christian
Hallo Christian,
MySQL bietet die Möglichkeit, remote access, also einen Zugriff von beliebigen
Servern im Internet, auszuschalten. Strato hat das anscheinend aktiviert, denn
die ODBC- Fehlermeldung, die ich bekomme (mit Access), ist daß mein Host (d.h. mein
Einwahlknoten) keine Zugriffsrechte auf den Datenbankserver besitzt.
Das kann man per Datenbankuser machen, d.h. bei meinem Provider
kann man sich entscheiden, ob die eigene Datenbank remote
access erlaubt oder nicht.
Frag' mal bei Strato nach, ob sie Dir das freischalten können. Laß
dich nicht mit irgendwelchen Sicherheitsbedenken abwimmeln,
denn da es per User freigeschaltet wird, ist das Schlimmste, was
passieren kann, daß einer mit deiner ID und Passwort in deiner
Datenbank rumpfuscht, und das kann Strato egal sein.
Anmerkung: wenn's geht, gibt es noch eine einfachere Möglichkeit
als die in meiner ersten Antwort erwähnte - einfach die Tabelle
aus Access per ODBC nach MySQL exportieren, dann wird
die Tabelle mit allen Daten angelegt.
Anmerkung2: der ODBC-Treiber benötigt grundsätzlich
ein oder mehrere kombinierte Felder, die als eindeutiger
Index dienen können.
Grüße
Stephan