Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi 2 Tabellen abgleichen (https://www.delphipraxis.net/88728-2-tabellen-abgleichen.html)

Tim Henford 20. Mär 2007 07:36

Datenbank: MSSQL • Zugriff über: ADO

2 Tabellen abgleichen
 
Hallo,

also ich versuche gerade eine Synchronisationsfunktion hinzubekommen.
Nun stellt sich die Frage, ob man den Inhalt 2er in den Spalten identische Tabellen, zusammenführen kann.

Denn bei einer großen Anzahl von Spalten ist es dann, denke ich aufwendig, jede einzelne Zelle von der einen Tabelle in die andere zu übertragen.

Des Weiteren sollte der Zugriff zum Synchronisationszeitpunkt nur für einen User erlaubt sein - da habe ich etwas vom Erstellen einer Sprerrtabelle gelesen, wie sieht sowas aus?

Dankschön
Tim

daddy 20. Mär 2007 18:59

Re: 2 Tabellen abgleichne
 
Ich selber arbeite mit Firebird und da gäbe es m.E. eine Möglichkeit das Ganze vom Server selber erledigen zu lassen mit ungefähr folgendem SQL-Befehl (, den ich allerdings jetzt nicht getestet habe):

SQL-Code:
Insert into Tabelle_A Select * from Tabelle_B where not Exists (Select * from Tabelle_A where IDNr = Tabelle_B.IDNr)
Erläuterung: Man kann mit einem INSERT auch mehrere Datensätze einfügen, deren Inhalt über das nachfolgend formulierte Select zugewiesen wird. Voraussetzung ist, dass das SELECT die gleichen Datentypen in der gleichen Reihenfolge liefert, wie sie vom INSERT erwartet werden. Da Du schreibst, es handelt sich um zwei gleiche Tabellen, wäre das in Deinem Fall ja erfüllt.
Prüf doch mal, ob diese Sysntax auch in MSSQL zulässig ist.

Zu Deiner zweiten Frage kann ich leider nichts Konkretes sagen. Man könnte natürlich eine eigene Sperrtabelle definieren, die man vor jedem INSERT oder UPDATE abfragen müsste, um zu prüfen, ob die Aktion gerade zulässig ist.

Tim Henford 20. Mär 2007 19:40

Re: 2 Tabellen abgleichen
 
Danke dir, die Idee ist schonmal gut, nur müsst ich jetzt den Inhalt der aus einer Datei in einen Datasource oder eben DBGrid geladen wird, auf den Server übertragen, wie geht denn sowas wieder?

daddy 20. Mär 2007 20:37

Re: 2 Tabellen abgleichen
 
Hmmm, vielleicht habe ich Dich da auch missverstanden. Ich hatte es so verstanden, dass es sich um zwei Tabellen handelt, die in der gleichen Datenbank des MSSQL-Servers liegen. :?

mkinzler 20. Mär 2007 21:15

Re: 2 Tabellen abgleichen
 
Haben die beiden Tabellen verschiedene PK-Wertebereiche?
Könnte mit MERGE durchgeführt werden.
http://www.databasejournal.com/featu...le.php/1438231

Tim Henford 20. Mär 2007 21:27

Re: 2 Tabellen abgleichen
 
Ja, das ist wohl schon sehr in diese Richtung mit der merge Replikation, nur leider bräuchte ich wohl eine kleine Beschreibung zum pull subscription System.

Ich dachte, dass es irgendwie noch anders geht. Wie macht man denn das, wenn man die BDE benutzt, da gibt es doch auch keine automatische eingabaute Replikationsfunktion wie bei MSSQL oder?

Wie sieht dass denn aus, muss ich da auch einen SQL Server auf der Client Seite haben, also um die Updates von dem DB-Server zu bekommen?

mkinzler 20. Mär 2007 21:32

Re: 2 Tabellen abgleichen
 
Du kannst das Ganze natürlich auch manuell machen. Die beiden tabellen der beiden Datenbanken Satz für Satz vergleichen.

Tim Henford 20. Mär 2007 21:41

Re: 2 Tabellen abgleichen
 
also kommt man nicht drumherum jede einzelne zelle von der einen Tabelle in die andere zu übertragen mit einer for oder while Schleife?

Kann man denn nicht wenigstens einen Teil von einem Dataset an den anderen anhängen, sodass die neu erstellten Einträge nicht Zelle für Zelle, sondern wenigstens Spalte für Spalte oder Zeile für Zeile kopiert werden? :cry:
Das dauert doch bestimmt ewig...

mkinzler 20. Mär 2007 21:42

Re: 2 Tabellen abgleichen
 
Ich würde das schon Zeile für Zeile machen.

Tim Henford 20. Mär 2007 22:44

Re: 2 Tabellen abgleichen
 
:?: wie macht man dass denn?

grenzgaenger 20. Mär 2007 23:31

Re: 2 Tabellen abgleichen
 
erst mal hilft ein vergleich zweier tabellen, der geht in der regel mit select. dann in dieser abhängigikeit machste entweder 'n insert (wie zuvor beschrieben) oder 'n select. auf alle fälle haste selbst dafür sorge zu tragen dass keine inkonsistenzen entstehen. mfg. Wolf

mkinzler 21. Mär 2007 06:41

Re: 2 Tabellen abgleichen
 
Ich würde die Datenstruktur um Timestamp-Autofelder für die letzte Änderung erweitern. So kannst du gezielt die geänderten datensätze angreifen und z.B. ber Merge-Operation synchronisieren.
Wobei ich im Vorfeld, wie auch in anderen Threads von dir schon angedeutet, weitere Vorüberlegungen über den Umfang und Vorrang usw. treffen würde.

Tim Henford 21. Mär 2007 08:11

Re: 2 Tabellen abgleichen
 
danke euch,

nur wie leitet man diese Merge Operation beim SQL (mittels Delphi?) ein? Also sagt ihm, dass ich jetzt ein Update brauche bzw. ich neue Daten in meiner Tabelle habe, die auf den Server sollen?

@grenzgaenger:
wie macht man denn einen Select, auf eine Tabelle die man aus einer Datei in ein Dataset geladen hat, wie meinst du das?

mkinzler 21. Mär 2007 08:18

Re: 2 Tabellen abgleichen
 
Merge ist eine spezielle Funktion, die INSERT/UPDATE zusammenfasst. D.h. vorhandene Datensätze werden upgedatet, neue hinzugefügt.

Tim Henford 21. Mär 2007 09:18

Re: 2 Tabellen abgleichen
 
also rufe ich anstatt
Delphi-Quellcode:
sql.Text := 'SELECT * FROM ''tabelle'''
jetzt
Delphi-Quellcode:
sql.Text := 'MERGE xyz in ''tabelle'''
?

mkinzler 21. Mär 2007 09:23

Re: 2 Tabellen abgleichen
 
Den genauen Syntax des Merge-Befehls mußt du im MSSQL-Manual nachschlagen.


Alle Zeitangaben in WEZ +1. Es ist jetzt 13:31 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz