Hallo Forum,
Ich habe ein Programm entwickelt mit Delphi 7. Das Programm soll mobile Mitarbeiter unterstützen.
Um zwei Datenbanken (Orginal und Replik) zu synchronisieren (
SQL Server im zentralen Office /
MSDE 2000 auf z.B. Laptop für unterwegs), habe ich folgende Konstellation aufgebaut.
Auf einer Maschine laufen zwei Instanzen der
MSDE 2000 Version A. Die erste Instanz ist Verleger und gleichzeitig Verteiler, die zweite Instanz ist folglich Abonnent. Auf der ersten ("zentralen") Instanz habe ich dann die Merge-Replikation mit Push auf die zweite ("mobile") Instanz eingerichtet. Wunderbar: Die Synchronisation läuft, eingestellt auf alle 10 Minuten. Später wird der Merge-Agent für das Synchronisieren sicherlich nur alle 2-3 Std. laufen, ggf. wird sogar sogar nur bei Bedarf synchronisiert.
Nun werden sich die mobilen Mitarbeiter mit ihrem Laptop ans Firmennetz hängen und ihre Änderungen sofort synchronisieren wollen. Dazu werden sie sich aus dem Programm heraus mit dem zentralen Datenbanksystem verbinden (erste Instanz mit dem Merge-Agenten) und einen Menüpunkt -> Synchronisieren <- ausführen, der letztendlich den Merge-Agenten anstößt.
Wie kann ich aus dem Programm heraus die Synchronisation erzwingen? Ich habe keine Ahnung, wie dies programmseitig entwickelt werden kann/muß. Denkbar wäre auch, das man aus dem Programm eine Batch Datei ausführt, welche dann den Merge-Agenten startet.
Vielleicht ist auch das Konzept, mobile Mitarbeiter mit einer
MSDE auszustatten, nicht das richtige.
Irgendwelche Ideen.
---------------------------------
Für
Access habe ich sowas auch gebastelt und es funktioniert so, wie ich es mir vorgestellt habe.
Dazu habe ich die Typen Bibliothek JRO installiert (Microsoft Jet and Replication Objects 2.X). Damit standen folgende Klassen zur Verfügung : TReplica / TJetEngine. Leider funktioniert das, soweit ich weiss, nur mit MS
Access.
Im Code dann wie folgt:
Delphi-Quellcode:
function AccessDB_ReplikSyncronisieren(ConnectObj:_Connection;RDBfadundName:string) : boolean;
var
FReplica : Replica;
begin
FReplica:= CoReplica.Create;
try
FReplica._Set_ActiveConnection(ConnectObj);
FReplica.Synchronize(RDBfadundName,jrSyncTypeImpExp,jrSyncModeDirect);
result:=true;
except
result:=false;
end;
end;
Hier der Aufruf der Methode:
Delphi-Quellcode:
if AccessDB_ReplikSyncronisieren(FormMain.ADOConnection1.ConnectionObject,RPfadundName) then begin
Memo1.Lines.Add('Starte Synchronisation ... fertig.');
end else ....
Danke
Andreas