AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi Zwei SQL-Datenbanken abgleichen, WIE?
Thema durchsuchen
Ansicht
Themen-Optionen

Zwei SQL-Datenbanken abgleichen, WIE?

Ein Thema von DiscMix · begonnen am 19. Sep 2004 · letzter Beitrag vom 28. Sep 2004
 
Robert_G
(Gast)

n/a Beiträge
 
#8

Re: Zwei SQL-Datenbanken abgleichen, WIE?

  Alt 20. Sep 2004, 10:59
Wäre es nicht so möglich?
  • Anmeldung an WinLine
  • Link zur KundenDB (KundenDB.Kunden)
  • Ein view auf die zu ändernden Daten:
    SQL-Code:
    CREATE OR REPLACE VIEW Clients2Synchronize AS
    SELECT Decode(k.A
                 ,NULL
                 ,1 /* kein Wert in Kunden -> INSERT */
                 ,2) DmlType /* andernfalls         -> UPDATE */
          ,Decode(k.A /* Der PK wird nur für's UPDATE gebraucht ;) */
                 ,NULL
                 ,-1
                 ,k.PK) PK
          ,sQ.A
          ,sQ.B
          ,sQ.C
    FROM (SELECT A, B, C
           FROM WinLine
           MINUS
           SELECT A, B, C /* alle Datensätze aus WinLine, */
           FROM KundenDB.Kunden) sQ /* die so nicht in Kunden enthalten sind */
           LEFT JOIN KundenDB.Kunden k
           ON k.A = sQ.A and /* deshalb Eindeutigkeit von A & B ;) */
              k.B = sQ.B
    UNION ALL
    SELECT 3 DmlType /* alle Datensätze aus Kunden, */
          ,k.PK /* die in WinLine nicht mehr da sind */
          ,k.A /* -> löschen */
          ,k.B
          ,k.C
    FROM KundenDB.Kunden k
    WHERE not EXISTS (SELECT IrgendWas
                       FROM WinLine
                       WHERE k.A = sQ.A and
                              k.B = sQ.B)
  • INSERT:
    SQL-Code:
    INSERT INTO WinLine
       (A, B, C)
       SELECT A, B, C
       FROM Clients2Synchronize sQ
       WHERE sQ.DmlType = 1
  • UPDATE:
    SQL-Code:
    UPDATE WinLine w
    SET (w.A, w.B, w.B) = (SELECT A, B, C
                              FROM Clients2Synchronize sQ
                              WHERE sQ.DmlType = 2 And sQ.PK = w.PK)
  • DELETE (wahrscheinlich unnötig):
    SQL-Code:
    DELETE FROM WinLine w
    WHERE w.PK in (SELECT PK
                    FROM Clients2Synchronize sQ
                    WHERE sQ.DmlType = 3)

Von Lösungen á la Daten in eine Delphi App holen, irgendwas damit machen und dann wieder zurückschieben halte überhaupt nichts.
Wenn man so seine Probleme löst, kann man sich gleich mySQL zulegen, eine halbwegs "intelligente" DB wie der SQL Svr wäre dann sinnlos.

BTW: Wer seine Problemlösungen nicht in reinem SQL oder der Script-Sprache der DB formulieren kann, sollte sein DB-Design überdenken.

Wie immer: Als ohne Gewehr, bin halt kein SQL Svr'ler Leusel???
  Mit Zitat antworten Zitat
 


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 19:19 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