AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi SQL Server <-> MSDE 2000 - Synchronisation anstoßen
Thema durchsuchen
Ansicht
Themen-Optionen

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

Ein Thema von Haueha · begonnen am 29. Aug 2006 · letzter Beitrag vom 30. Aug 2006
Antwort Antwort
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
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#2

Re: SQL Server <-> MSDE 2000 - Synchronisation anstoße

  Alt 29. Aug 2006, 15:52
Deine Aufgabe lässt sich über MSDN-Library durchsuchenSQLDMO erledigen.
Dazu im Delphi-Menü:
Projekt->Typbibliothek installieren... und "Microsoft SQLDMO Object Library" auswählen und
Unit anlegen klicken.

Du wirst nun von der Anzahl der Interfaces fast erschlagen (100 oder mehr ?).
Welches Interface du wie ansteuern musst, kann dir am ehesten in einem MS Forum erklärt werden.
Über SQLDMO hast du die Kontrolle über alles was mit dem SQL Server zu tun hat; es ist nur etwas viel für den Anfang.
http://support.microsoft.com/kb/324992/

PS:
Alternativ müsste es auch möglich sein, diese Synchronisation über eine schon vorhandene Stored Procedure anzustossen.
Schau mal in der Hilfedatei nach "sp_resyncmergesubscription" (das hört sich schon mal interessant an)
Andreas
  Mit Zitat antworten Zitat
Haueha

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

Re: SQL Server <-> MSDE 2000 - Synchronisation anstoße

  Alt 30. Aug 2006, 17:13
Hallo shmia,

vielen Dank für deine schnelle Hilfe. Habe mich mit deinen Tipps einen Augenblick beschäftigt.

Zitat von shmia:
Deine Aufgabe lässt sich über MSDN-Library durchsuchenSQLDMO erledigen.
Dazu im Delphi-Menü:
Projekt->Typbibliothek installieren... und "Microsoft SQLDMO Object Library" auswählen und
Unit anlegen klicken.

Du wirst nun von der Anzahl der Interfaces fast erschlagen (100 oder mehr ?).
Welches Interface du wie ansteuern musst, kann dir am ehesten in einem MS Forum erklärt werden.
Über SQLDMO hast du die Kontrolle über alles was mit dem SQL Server zu tun hat; es ist nur etwas viel für den Anfang.
http://support.microsoft.com/kb/324992/
Hier mußte ich diverse Klassen erstmal neu benamslen, da Klassen wie "TApplication" natürlich schon bekannt waren. Und das dann eben Xmal. Dann gabs beim kompilieren noch ein paar Fehler. Anschließend stand ich vor dem Problem, welche der Komponenten es denn nun tun könnte, wie du schon vermutest hast.

Um es kurz zu machen, ich habe die Synchronisationsfunktion von XP genutzt, zu finden unter Start / Alle Programme / Zubehör / Synchronisieren. Das, was ich aus meinen Programm machen wollte, kann ich auch übers Betriebssystem steuern. Keep it simple ...

Es läuft nun wie folgt:
1). Delphi Programm starten
2). "Mandanten" auswählen, also die SQL DB, mit der man verbunden sein will (Zentral = SQL Server = Netzwerk oder Mobil = MSDE = lokal)
3). Will man synchronisieren, dann über Start / Alle Programme / ..... / Synchronisieren. Fertig

Läuft einwandfrei und ist super simple. Damit hat man auch die drohende Vielzahl von Sychronisations Jobs (der Merge Push Agenten) vom SQLServer genommen. Die Richtung ist quasi umgedreht, also vom Client initiiert. Die Merge Pull Agenten laufen lokal auf der jeweiligen MSDE. Macht auch deshalb Sinn, weil man für Merge Push Agenten nicht die Option "on demand" einstellen kann, sondern diese nur zeitgesteuert/ereignisgesteuert laufen. Ich wollte ja nur dann synchronisieren, wenn der Mitarbeiter mit seinen Laptop am Netz hängt und es explizit ausführt.

Gruß, Andreas
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:24 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz