Access - MySQL Datenbanken synchronisieren

Access - MySQL Datenbanken synchronisieren

am 21.04.2008 19:45:45 von Richard Ohl

Moin,

vielleicht könnt ihr mir mit ein paar Anregungen helfen. Ich würde gern zwei
Datenbanken miteinander synchronisieren. Das geschieht momentan mit
eval'detem Code, der per cURL mit Zertifikat vom Offline- auf den
Online-Server und zurück transferiert wird. Das Ding ist so stark
gewachsener, prozeduraler Code, dass ich das gern neu schreiben würde (hm,
genauer: muss...). Ich bin an ein paar Anregungen interessiert, wie ihr das
vielleicht schon mal gelöst habt und bin gespannt, welche Kommentare und
Kritik ihr an meinen nachfolgenden Grundüberlegungen hegen mögt.
Ich werde versuchen, dass nachfolgend so kurz wie möglich zu skizzieren:

MS Access Seite: (ja, ich weiß, war eine politische Entscheidung und kann
vorerst nicht abgelöst werden)
Tabelle 1: id, onlineid, X1 (Typ text), X2 (Typ Yes/No), X3 (Double), X4
(datetime), X5 (Memo)

MySQL Seite (momentan):
id, offlineid, yes/no usw. sind integer, datetime ein varchar, und das Memo
ein entsprechendes blob-Feld. Da werde ich im Zuge des Umbaus sicher ein
paar Veränderungen vornehmen... Allerdings kann es sein, dass X3 in der
anderen Datenbank K98 heißt (oder einen anderen bescheuerten Beispielnamen
hat).

Zum Vorgehen:
Ich möchte, auch auf der offline-Seite, gern PHP nutzen, weil ich keine
andere Sprache besser beherrsche als PHP - wie gut oder schlecht das nun am
Ende ist sei mal dahingestellt. Dazu kommt noch, dass ich momentan auf PHP 4
festgelegt bin, bis PHP 5 dauert es hier noch ein bisschen...

Ich hatte jetzt überlegt, per PHP und ODBC auf die Access-DB zuzugreifen und
die MySQL-Tabellen in der selben Access-DB über MyODBC zu verlinken. Dann
hätte ich in PHP nur einen Ressource-Identifier, mit dem ich alle benötigten
Abfragen behandeln könnte. Soweit, so gut?

Änderungs-/Konfliktmanagement:
Generell wäre es hier so, dass ich bei Konflikten gern ein manuelles Merge
veranlassen möchte, dass also ein Mensch beide Datensätze abgleicht -
solange würde ich bei gleichzeitig geänderten Datensätzen in beiden DB's
(das kommt selten vor) den betreffenden Datensatz per Lock-Tabelle von der
Synchronisation ausschließen. Für alle geänderten Sachen: Ich denke, dass es
unhandlich wird, Access das Führen eines Logbuchs bei Änderungen in
einzelnen Feldern beizubringen. Da fände ich es fast schlauer, beide
Datensätze in ein Array zu lesen und das dann zu vergleichen - oder?
Natürlich würde ich vorher prüfen, ob der Datensatz seit dem letzten Lauf
überhaupt geändert wurde - aber inperformant scheint mir das trotzdem
irgendwie. Habt ihr Vorschläge dafür?

Ich schließe erst einmal - Ergänzungen kann es dann ja in der Diskussion
geben, wo nötig. Hoffentlich liest überhaupt noch jemand dclpd...

Vielen Dank!
Richard

--
If you're never scared or embarrassed or hurt, it means you never take any
chances. -- Julia Sorel