Einzelnen Beitrag anzeigen

Haueha

Registriert seit: 29. Aug 2006
2 Beiträge
 
#1

SQL Server <-> MSDE 2000 - Synchronisation anstoßen

  Alt 29. Aug 2006, 14:58
Datenbank: SQL Server / MSDE • Version: 2000 • Zugriff über: ADO / ADOX
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
  Mit Zitat antworten Zitat