Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Datenbestände synchronisieren (https://www.delphipraxis.net/176182-datenbestaende-synchronisieren.html)

RWarnecke 17. Aug 2013 20:11

Datenbestände synchronisieren
 
Hallo zusammen,

ich habe zwei Datenbestände, die nicht in einer Datenbank sind. Ich kann also nicht mit SQL arbeiten. Ich suche jetzt nach einem Weg, wie ich mitbekomme wann ein Datensatz in einem der beiden Datenbestände gelöscht wird.

Meine Idee ist, dass ich von jedem Datenbestand bei jeder Synchronisierung den Bestand zwischenspeichere und bei der nächsten Synchronisierung gegen den Zwischenspeicher vergleiche und den Unterschied dann jeweils im anderen Datenbestand lösche.

Gibt es noch andere Möglichkeiten ?

Perlsau 17. Aug 2013 21:06

AW: Datenbestände synchronisieren
 
Suchst du sowas?
Scheint dasselbe zu sein wie das da.
Oder darf's gleich was für Delphi sein?

nahpets 17. Aug 2013 21:31

AW: Datenbestände synchronisieren
 
Zitat:

Zitat von RWarnecke
Ich kann also nicht mit SQL arbeiten

Warum nicht?
Welche Datenbank(en)?
Oracle kennt Datenbanklinks.
SQL-Server kennt Datenbankverbindungsserver.
Postgres nutzt dbLink
Verbindungen zwischen Oracle und MySQL scheinen auch möglich.

Die Verbindungen... werden eingerichtet und entsprechend in die SQL-Statemets eingebaut und schon ist ein datenbankübergreifender Zugriff per SQL möglich.

RWarnecke 17. Aug 2013 22:07

AW: Datenbestände synchronisieren
 
Erstmal danke für eure Antworten.

Zitat:

Zitat von Perlsau (Beitrag 1225204)
Suchst du sowas?
Scheint dasselbe zu sein wie das da.
Oder darf's gleich was für Delphi sein?

Das ist nicht ganz das was ich suche. Ich muss mir das Delphi-Beispiel nochmal genauer anschauen, ob ich dass auf meine Datenbestände anwenden kann.

Zitat:

Zitat von nahpets (Beitrag 1225207)
Zitat:

Zitat von RWarnecke
Ich kann also nicht mit SQL arbeiten

Warum nicht?
Welche Datenbank(en)?
Oracle kennt Datenbanklinks.
SQL-Server kennt Datenbankverbindungsserver.
Postgres nutzt dbLink
Verbindungen zwischen Oracle und MySQL scheinen auch möglich.

Die Verbindungen... werden eingerichtet und entsprechend in die SQL-Statemets eingebaut und schon ist ein datenbankübergreifender Zugriff per SQL möglich.

Die Datenbestände sind keine Datenbanken. Deshalb ist hier kein SQL möglich.

Um es eventuell etwas genauer zu beschreiben. Der eine Datenbestand ist eine Art CSV-Datei und der andere Datenbestand ist vergleichbar mit einem lokalen Adressbuch wie Outlook. In beiden Datenbeständen stehen mehrere Adressen, die immer wieder synchronisiert werden müssen.

nahpets 17. Aug 2013 22:31

AW: Datenbestände synchronisieren
 
Hilft dann eventuell tKBMMemTable?

Nutze diese Komponente für CSV-Dateien und diverse, kleinere "Datenbankanwendungen" (in einer schon in die Jahre gekommenen Version).
Die "Datenbankanwendungen" basieren alle auf CSV-Dateien, die einen für die Komponente benötigten Dateiheader "übergestülpt" bekommen.

Die oben verlinke Version kann aber (laut Beschreibung) auch mit SQL umgehen.

Als Freeware mit Source bei Torry.net.

Hansa 17. Aug 2013 23:12

AW: Datenbestände synchronisieren
 
@Perlsau : es geht doch wohl um Änderungen innerhalb einer Datei. Deine Links beziehen sich auf Änderungen innerhalb eines Ordners.

Es nützt ja wohl nichts, zu wissen dass eine Datei verändert wurde, wenn man wissen müsste, was sich da innerhalb der Datei geändert hat.

Allerdings : wer löscht denn was und wer soll das wissen ? :shock: Aber egal wie, das riecht schwer nach Redundanz und das sollte man tunlichst nur selten machen. 8-)

Medium 18. Aug 2013 03:36

AW: Datenbestände synchronisieren
 
Wenn nicht beide Quellen für die jeweiligen Daten eine API bieten, die eine Art OnChange-Event liefern, bleibt dir ja eigentlich nur noch regelmäßiges Erstellen einer Liste beider Datenbestände. Zu jedem Datensatz müsste dann noch mit gespeichert werden, ob der Satz in dem einen, dem andere oder in beiden Beständen vorkommt, und für jeden der beiden Bestände je noch einen Timestamp der letzten Änderung, die du festgestellt hast.
Dann musst du im Grunde "nur" noch daher gehen, und in beiden Beständen die jeweils fehlenden und/oder älteren Daten mit denen des jeweils anderen ergänzen/überschreiben, so dass deine Vergleichsliste nachher sagen würde: "Alle Sätze sind in beiden Beständen mit selbem Timestamp vorhanden". Optimierbar wäre das fast nur noch über eine Funktion von Windows, die dir ein Ereignis gibt, wann eine Datei geändert wurde. Ob es die gibt und wie die heisst weiss ich nicht, aber du musst auch dann für einen Abgleich sicherlich alle Daten anfassen. Und vor allem deine Vergleichsliste am besten auch persistent vorhalten.

Idealzustand wäre natürlich den Bedarf für einen der Bestände zu eliminieren, aber wie realistisch das in der Praxis ist musst du selbst einschätzen. Zumindest nach aktuellen Informationsstand hier ;)

Uwe Raabe 18. Aug 2013 09:18

AW: Datenbestände synchronisieren
 
Ich versuche mich mal wieder als Querdenker: Wenn du ein textbasiertes Format für beide Datenbestände findest (z.B. CSV), kannst du das auch über ein standardisiertes Diff abwickeln.

Konkret würde ich das hier mit Mercurial realisieren, bei dem ich die beiden Datenbestände in verbundenen Repositories verwalte und die Änderungen vom einen jeweils in das andere merge. Was man natürlich braucht, sind geeignete Tools für den Export/Import zwischen den nativen Datenbeständen und dem Textformat. Im Falle von Mercurial könnte man die sogar in den passenden Hooks aufrufen um das weitestgehend zu automatisieren.

Das geht sicher auch mit anderen VCSs, aber mit Hg kenne ich mich halt am besten aus.

EgonHugeist 18. Aug 2013 10:37

AW: Datenbestände synchronisieren
 
Hallo Rolf,

auch eine Querdenker Idee:
Du kannst *.csv Dateien mit der dem Jet OLE DB Provider öffnen. Bsp: http://www.htmlgoodies.com/primers/d...omponents.html

Du must nur vordefinieren, wie die csv Datei (geht auch txt + Delimiter) aufgebaut ist.

Wie greift du auf Outlook zu? Hatte mal eine Weiterentwicklung von den TurboPower OfficePartner Componenten betrieben. Damit könntest du einfach alle Daten (außer Bilder und Datums-Angaben) auslesen. Bei Bedarf melden. Aber weiter im Text.

Der Jet OLE DB provider macht es dir möglich nun auch SQL Statements zu benutzen. Somit könntest du in einer Art Master-Detail realtion die Datensätze syncen und herausfinden welche hinzugefügt werden müssen bzw. gelöscht werden sollten.

Gruß Michael

Furtbichler 18. Aug 2013 12:46

AW: Datenbestände synchronisieren
 
Wenn es nicht gerade Abermillionen von Datensätzen sind, dann lies die beiden Dateien doch einfach in zwei Dictionaries ein und mach das Matching 'per Hand', das geht mit den Dictionaries sehr schnell.


Alle Zeitangaben in WEZ +1. Es ist jetzt 01:55 Uhr.
Seite 1 von 2  1 2      

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