Access-DB mit PHP über ODBC, DSN auf Linux-Kiste wie erzeugen?
J.Hahn
- php
0 Tom0 Gemeindediener0 J.Hahn0 Tom
0 Christian Seiler0 Tom
Hallo allerseits,
Problem ist folgendes: Ich habe eine Access-Datenbank als *.mdb-Datei. Diese möchte ich auf einen VPS-Server (Betriebssystem: Linux) hochladen und dort direkt per ODBC-Funktionen von PHP auf diese Access-Datei/-Datenbank zugreifen (damit ich die Daten in eine MySQL-DB packen kann).
Nun weiß ich, dass man dazu eine DSN-Datenquelle einrichten muss. Dummerweise, wird in jedem PHP-Buch beschrieben, wie man das auf einer Windows-Kiste macht (und da funktioniert der PHP-ODBC-Zugriff anschließend auch). Nur wie man dieses DSN-Ding per Shell auf einem Linux-Server hinbekommt, finde ich nirgends.
Laut phpinfo() ist auf dem Linux-Server ODBC installiert (PHP 4.4).
Weiß jemand vielleicht Rat oder nen Link zu einem Tutorial o.ä.
Herzlichen Dank im voraus. Grüße, Josef
Hello,
Problem ist folgendes:
Du benötigst auch eine Maschine dafür.
Ich weiß leider nicht, ob es eine für Linux gibt.
Harzliche Grüße vom Berg
http://www.annerschbarrich.de
Tom
Hi Tom,
Du benötigst auch eine Maschine dafür.
Ich weiß leider nicht, ob es eine für Linux gibt.
... ??? "Maschine"? Meinste den Server? Ist ein Virutal Private Server mit Linux drauf mit Shell- und Plesk-Zugang.
Oder meinst Du da was anderes?
Grüße, Josef
Hello,
Du benötigst auch eine Maschine dafür.
Ich weiß leider nicht, ob es eine für Linux gibt.
... ??? "Maschine"? Meinste den Server? Ist ein Virutal Private Server mit Linux drauf mit Shell- und Plesk-Zugang.
Oder meinst Du da was anderes?
Datanbank-Maschine oder auf Neudeutsch data base engine (dbe)
Microsoft ACCESS arbeitet mit einem Frontend (ACCESS), einer Datenbasis (*.mdb) und einer (eigentlich mehreren) verteilten Datenbankmaschine (JET-Engine).
Die läuft eigentlich nur auf Windows.
Ich habe aber Tools für Dich rausgesucht, die auf Linux laufen, um die Datenbasis zu LESEN.
Siehe anderes Posting
Harzliche Grüße vom Berg
http://www.annerschbarrich.de
Tom
Hello,
Ich habe aber Tools für Dich rausgesucht, die auf Linux laufen, um die Datenbasis zu LESEN.
Sorry, das ganze Posting ist im Nirwana versickert.
Aber Christian hat es auch gefunden.
suche über google: http://www.google.de/search?hl=de&q=ACCESS+Database+reader+for+Linux&btnG=Suche&meta=
http://www.gentoo.org/news/de/gwn/20030901-newsletter.xml
Da stehen gleich mehrere Verweise drin, die ich jetzt aber nicht nochmal wiederhole.
Den wichtigsten hat Christian schohn posted.
Harzliche Grüße vom Berg
http://www.annerschbarrich.de
Tom
Hi Tom,
jetzt IC ;-). Habe auch noch ein Windows-Tool gefunden, das ob des günstigen Preises vielleicht eine Alternative ist, da man nix mehr programmieren, installieren oder konfigurieren muss ;-)
http://www.dbcopy.de/
Gruß, Josef
Hello Josef,
Habe auch noch ein Windows-Tool gefunden, das ob des günstigen Preises vielleicht eine Alternative ist, da man nix mehr programmieren, installieren oder konfigurieren muss ;-)
Wenn Du da die Vollversion bestellen solltest und sie ausprobiert hast, dann könntest Du mir bitte ein kleines email schicken. Das interessiert mich auch.
Und wenn es Andere auch noch interessiert, solltest Du vielelicht auch hier einen Kurzbericht hinterlassen.
Harzliche Grüße vom Berg
http://www.annerschbarrich.de
Tom
Hi Tom
Wenn Du da die Vollversion bestellen solltest und sie ausprobiert hast, dann könntest Du mir bitte ein kleines email schicken. Das interessiert mich auch.
... ich habe gestern mal die Demoversion ausprobiert und bin enorm begeistert: Auf einem Windows-Rechner kann man damit ganz einfach eine (Access-DB-)Datenquelle auswählen, eine Ziel-DB (z.B. die MySQL auf dem entfernten Server), dann aus der Quell-DB Tabellen und Felder(!) beliebigen Tabellen der Ziel-DB zuordnen und als Profil speichern. Anschließend muss man nur noch jedesmal den Exportieren-Knopf drücken und es klappt prima. hab's mit der Access (lokal), MySQL (Server) Kombination ausprobiert.
Dann gibt's da noch eine "Migrations"-option, die gesamte DBs oder nur Tabellen mitsamt Struktur (sofern möglich) auf eine andere DB kopiert (auch wieder von lokal zu Web möglich).
Für 70 Öre finde ich das Tool genial und werde es auch bei meinen hier diskutierten Problem einsetzen (keine Sorge, ich bekomme keine Provision für allzu überschwengliche Berichte ;-)).
Grüße, Josef
Hello Josef,
Für 70 Öre finde ich das Tool genial und werde es auch bei meinen hier diskutierten Problem einsetzen (keine Sorge, ich bekomme keine Provision für allzu überschwengliche Berichte ;-)).
Danke für den Erfahrungsbeicht
Harzliche Grüße vom Berg
http://www.annerschbarrich.de
Tom
Moin,
falls Du die Datenquelle nur einmal umziehen musst, mach am Besten einen Export in eine Meta-Datei und damit einen Import nach MySQL auf dem LINUX-System (also ganz weg von MS-Access).
Evntl. kannst Du mit MS-Access auch einen Dump machen, der zu MySQL kompatibel ist, ob das jedoch geht, weiß ich nicht.
--Heinz
Hi Heinz,
falls Du die Datenquelle nur einmal umziehen musst, mach am Besten
... leider nein. Die Möglichkeit, die Access-Datenbanktabellen in z.B. XML-Dateien zu exportieren, ist leider keine Option, da die Access-Datenbank-Datei monatlich in die MySQL importiert werden muss - und das weitesgehend automatisiert :-(.
Grüße, Josef
Moin!
falls Du die Datenquelle nur einmal umziehen musst, mach am Besten
... leider nein. Die Möglichkeit, die Access-Datenbanktabellen in z.B. XML-Dateien zu exportieren, ist leider keine Option, da die Access-Datenbank-Datei monatlich in die MySQL importiert werden muss - und das weitesgehend automatisiert :-(.
Dann tust du gut daran, den Zwischenschritt in XML oder CSV zu automatisieren - und zwar auf dem Windows-System.
Ist ja nun wirklich keine große Hürde: Batch-Skript aufrufen, das erzeugt Zwischendaten, startet den Upload zum Server, und dieser Upload schreibt die Daten dann direkt in MySQL hinein. Sowas ist eigentlich tägliches Brot.
- Sven Rautenberg
Hello,
Ist ja nun wirklich keine große Hürde: Batch-Skript aufrufen, das erzeugt Zwischendaten, startet den Upload zum Server, und dieser Upload schreibt die Daten dann direkt in MySQL hinein. Sowas ist eigentlich tägliches Brot.
Jein...
Das setzt natürlich voraus, dass an der MySQL-Datenbank in der Zwischenzeit nichts verändert wurde.
Wenn er beide Datenbanken aufeinander abgleichen muss, wird es um ein Vielfaches komplexer.
Harzliche Grüße vom Berg
http://www.annerschbarrich.de
Tom
Hi Sven,
Ist ja nun wirklich keine große Hürde: Batch-Skript aufrufen, das erzeugt Zwischendaten, startet den Upload zum Server, und dieser Upload schreibt die Daten dann direkt in MySQL hinein. Sowas ist eigentlich tägliches Brot.
... <g>, nun ja, für einen PHP-Programmierer, der bis dato Access noch nicht einmal geöffnet hatte, schon ;-).
Bislang hatte ich diese komische Konstellation "Access- zu MySQL-DB" eben noch nicht.
Gruß, Josef
Hello,
Evntl. kannst Du mit MS-Access auch einen Dump machen, der zu MySQL kompatibel ist, ob das jedoch geht, weiß ich nicht.
als CSV kann man die Tabellen einzeln abspeichern.
Referenzielle Integrität, Indexe und alle anderen Besonderheiten muss er sowieso neu aufbauen.
Spannend wird es bei AutoIncrement-Keys
Ich habe da zwar mal 'was von Migrationstools gelesen, finde es aber leider nicht wieder.
Die waren aber bestimmt auch nicht kostenlos.
Harzliche Grüße vom Berg
http://www.annerschbarrich.de
Tom
Hallo Josef,
Nun weiß ich, dass man dazu eine DSN-Datenquelle einrichten muss. Dummerweise, wird in jedem PHP-Buch beschrieben, wie man das auf einer Windows-Kiste macht (und da funktioniert der PHP-ODBC-Zugriff anschließend auch). Nur wie man dieses DSN-Ding per Shell auf einem Linux-Server hinbekommt, finde ich nirgends.
Du wirst scheitern. Sorry, dass ich das so direkt sage, aber:
ODBC ist eine Schnittstelle, an die von zwei Seiten aus "angedockt" werden kann: Zum einen können Applikationen (z.B. auch PHP-Scripte) ODBC nutzen, um auf Datenbanken zuzugreifen. Zum anderen können Datenbanktreiber an ODBC andocken, um Zugang zu unterschiedlichen Datenbanken zu ermöglichen.
Wenn Du auf einer Windows-Kiste nun Microsoft Access installierst, dann installiert Microsoft Access einen ODBC-Treiber, der die Bibliotheken von Microsoft Access selbst (!) benutzt, damit Datenbanken über ODBC auf Access-Datenbanken zugreifen können.
Unter Linux mag Dir jetzt nun bereits ODBC zur Verfügung stehen - das nützt Dir aber gar nichts. Der Grund: Microsoft Access wirst Du auf Deinem Linux-Server nicht installiert haben und wohl kaum so installiert bekommen [1], dass Du damit ODBC nutzen kannst. Das heißt aber dann auch, dass Du keinen ODBC-Treiber zur Verfügung hast, um auf Access-Datenbanken zuzugreifen - ODBC ist für Dich in diesem Fall nutzlos.
Gut, es kann sein, dass irgend jemand mal einen nativen Linux-ODBC-Treiber für Access-Datenbanken geschrieben hat, aber ich wage es ehrlich gesagt, daran zu zweifeln. Du kannst ja mal danach suchen, vielleicht findest Du ja doch etwas. Wenn Du die Datenbank also verwenden willst, dann bleibt Dir nur, die Datenbank zu konvertieren in etwas, was Du mit PHP verarbeiten kannst. Das kann SQLite sein, das kann MySQL sein, das kann ein Microsot SQL Server sein, den der Linux-Server über's Netzwerk sehen kann, das kann Postgres sein, das kann ein Oracle-Server sein, etc. Nur mit Access wirst Du nicht weit kommen.
Achja, ganz generell, unabhängig von der aktuellen Problematik: ich würde auf PHP5 aktualisieren.
Viele Grüße,
Christian
[1] Ja, es läuft unter Wine, aber Wine kapselt die Windows-Applikationen ja ab - ich bezweifle, dass das ODBC innerhalb von Wine mit dem ODBC außerhalb kommunizieren kann.
Hi Christian,
vielen Dank für die ausführliche Info (die mir so auch einleuchtet). Mist, denn genau die Konvertierung der Access-Daten von Hand in z.B. XML wollte ich verhindern. Das sollte eigentlich alles automatisch passieren. Also *.mdb-Datei hochladen und PHP/ODBC-Zugriffsskript per Cronjob regelmäßig starten.
Sollte es dann denn gar keine Möglichkeit geben, aus einer nativen Access-MDB-Datei auf einem Server die Daten irgendwie zu extrahieren???
Grüße, Josef
Hallo Josef,
vielen Dank für die ausführliche Info (die mir so auch einleuchtet). Mist, denn genau die Konvertierung der Access-Daten von Hand in z.B. XML wollte ich verhindern. Das sollte eigentlich alles automatisch passieren. Also *.mdb-Datei hochladen und PHP/ODBC-Zugriffsskript per Cronjob regelmäßig starten.
Was spricht dagegen unter Windows die .mdb-Dateien automatisiert zu verarbeiten? Unter Windows läuft ja auch PHP (u.v.m.). Und Windows kennt ja auch "Cron-Jobs" - nennt sich bloß "Taskplaner".
Sollte es dann denn gar keine Möglichkeit geben, aus einer nativen Access-MDB-Datei auf einem Server die Daten irgendwie zu extrahieren???
Wie gesagt: Möglich, dass jemand einen ODBC-Treiber geschrieben hat. Ferner ist's auch möglich, dass jemand einen anderen Treiber geschrieben hat, um das Format zu lesen. Mir ist keines davon bekannt, aber ich habe mich auch noch nicht wirklich damit auseinandergesetzt. Du müsstest halt mal suchen.
Viele Grüße,
Christian
Hi Christian,
Was spricht dagegen unter Windows die .mdb-Dateien automatisiert zu verarbeiten? Unter Windows läuft ja auch PHP (u.v.m.). Und Windows kennt ja auch "Cron-Jobs" - nennt sich bloß "Taskplaner".
... die Access-DB befindet sich normalerweise auf dem Arbeits-PC eines Kunden, der dort Daten eingibt, die einmal im Monat in die MySQL-DB der Firmenwebsite sollen. Auf diesem Arbeitsrechner des Kunden kann ich leider keine XAMP-Umgebung installieren. Es wäre dem Kunden (DAU!! ;-) ) höchstens zuzumuten, dass er die Datenbankinhalte monatlich per Knopfdruck auf den Webserver hochlädt.
Falls das so laufen sollte, wäre wahrscheinlich wirklich nur noch die Möglichkeit offen, eine Batch-Datei zu schreiben, die die Access-DB-Tabellen in XML-Dateien (CSV ist nicht gut) exportiert und diese dann automatisch hochlädt.
Dumm nur: Ich hab noch nie was mit Batch-Dateien oder Access-Automatisierungen zu tun gehabt.
Grüße, Josef
Hallo Josef,
... die Access-DB befindet sich normalerweise auf dem Arbeits-PC eines Kunden, der dort Daten eingibt, die einmal im Monat in die MySQL-DB der Firmenwebsite sollen. Auf diesem Arbeitsrechner des Kunden kann ich leider keine XAMP-Umgebung installieren. Es wäre dem Kunden (DAU!! ;-) ) höchstens zuzumuten, dass er die Datenbankinhalte monatlich per Knopfdruck auf den Webserver hochlädt.
Falls das so laufen sollte, wäre wahrscheinlich wirklich nur noch die Möglichkeit offen, eine Batch-Datei zu schreiben, die die Access-DB-Tabellen in XML-Dateien (CSV ist nicht gut) exportiert und diese dann automatisch hochlädt.
Dumm nur: Ich hab noch nie was mit Batch-Dateien oder Access-Automatisierungen zu tun gehabt.
Ich hab mal meine Lieblingssuchmaschine verwendet und mal etwas gesucht und das hier gefunden:
http://mdbtools.sourceforge.net/
Vielleicht hilft Dir das ja weiter.
Viele Grüße,
Christian
Hello,
Unter Linux mag Dir jetzt nun bereits ODBC zur Verfügung stehen - das nützt Dir aber gar nichts. Der Grund: Microsoft Access wirst Du auf Deinem Linux-Server nicht installiert haben
Er kann aber XAMPP auf seiner Windows-Kiste installieren und dann kann er mittles DSN und ODBC auf die Access-Datei zugreifen. Es gehen aber nur Snapshots, keine Dynasets. Aber er will ja cuh nicht damit arbeiten, sondern nur die Tabellen rüberziehen. Das ginge auf diesem Wege.
Und wenn er fertig ist, macht er einen MySQL-Dump und den kann er dann auf dem Linux-Rechner wieder einspielen.
Ich glaube aber, über CSV geht es wirklich schneller.
Dazu benötigt er natürlich ein funktionstüchtig eingerichtetes MS-ACCESS
Einfach öffnen, rechte Maustaste auf die Tabelle in der Liste
Exportieren -> CSV -> "ohne Format" -> Export-Optionen einstellen (Datum umdrehen!, Punkt als Dezimaltrenner, usw.) -> Export
Die erste Zeile als Spaltennamen benötigt er nicht, weil er die Tabellen in MySQL sowieso manuell aufbauen muss (wenn nicht ein Super-Tool vorhanden ist).
Harzliche Grüße vom Berg
http://www.annerschbarrich.de
Tom
Hello,
vielleicht hilft Dir das noch weiter:
http://sourceforge.net/projects/mdbtools/
http://www.gentoo.org/news/de/gwn/20030901-newsletter.xml
Google Suche http://www.google.de/search?hl=de&q=ACCESS+Database+reader+for+Linux&btnG=Suche&meta=
Es gibt da was "nur zum Lesen" ... wusste ich doch.
Aber ich habe es noch nie ausprobiert.
Den Zugriff mit PHP auf die ACCESS-Jet-Engine hatte ich aber schonmal ausgiebig genossen :-((
Harzliche Grüße vom Berg
http://www.annerschbarrich.de
Tom