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???