Halihallo Andreas
-- hier komme ich nicht weiter. --
Das Problem besteht darin, die auf dem Client nicht vorhandenen Datensätze herauszufinden. OK, man kann auch hier den Zeitpunkt der letzten Synchronisation ermitteln (da komme ich wohl nicht drum herum wegen der Updates), aber wie unterscheide ich zwischen Insert und Update? Woher weiß ich ob der Datensatz jetzt neu angelegt wurde und noch nicht auf dem Client vorhanden ist, oder ob er lediglich geändert wurde? Ich kann ja leider nicht mit einem Insert einen vorhandenen Datensatz mit gleicher ID überschreiben!
Naja, dann kannst du ja einen DELETE FROM WHERE ID=xxx vorn anhängen, der einen potenziellen Eintrag löscht und ihn durch den neuen ersetzt, oder?
Hat jemand ne Idee wie ich das Problem lösen kann? Ich möchte hierbei nicht in die eigentliche Anwendung(d.h. die Anwendung die synchronisiert werden soll) eingreifen, d.h. deren INSERT-Statements verändern. Gibt es eine Möglichkeit in MySQL einen automatischen Timestamp für die Erstellung des Datensatzes einzufügen? Sowas der Art den Standardwert vom 2. Timestamp auf NOW() setzen(geht leider nicht)?
Naja, ich hab etwas den Überlick verlohren, muss ich gestehen; aber vielleicht habe ich hierzu einen Einwurf, der eventuell etwas tauen könnte: Automatisch glaube ich nicht, dass du ne timestamp in die DB schreiben kannst, aber wenn die Spalte vorhanden ist und du keine Änderungen an den Programmen selber vornehmen möchtest, dann gäbe es noch die Möglichkeit über einen hintergrundsprozess, der z. B. alle 10 Minuten anspringt und neue Records mit der "nahezu" aktuellen Timestamp versieht. So hast du wenigstens eine Näherung; ob die ausreicht und ob der Arbeitsaufwand OK ist, müsstest du entscheiden.
Sonst fiele mit nur ein _noch ein weiteres_ Feld in jede Tabelle einzufügen, und zwar mit einem Synchronisations-Status, standardmäßig auf 0, nach der Synchronisation auf 1 gesetzt.
Dafür behält das HerkunftID Feld für immer seine ID. Jetzt kann ich auf dem Client anhand des Statusfeldes sehen, ob der Datensatz bereits synchronisiert wurde, und auf dem Master kann ich an dem HerkunftsID Feld sehen, ob der Datensatz schon auf dem Client vorhanden ist.
Aber dann hätte ich schon 2 extra Felder, hat vielleicht jemand ne bessere Idee?
Ich würde gerne helfen, aber... (vielleicht fällt mir ja morgen was schlaues ein)
Viele Grüsse
Philipp
<-- der sein Hirn vielleicht noch nicht ganz eingeschaltet hat...