Einfache SQL-Abfrage zum synchronisieren

m.A.o

Benutzer
Beiträge
5
hallo DB-Spezialisten

ich habe drei Arbeitsplätze, die über VPN überregional verbunden sind. Zum synchronisieren verwende ich folgendes Konstrukt
SELECT A.AdrNumm as A_ADRNUMM, A.TimStmp as A_TIMSTMP, ;
B.AdrNumm as B_ADRNUMM, B.TimStmp as B_TIMSTMP, ;
WHERE A.AdrNumm == B.AdrNumm AND A.TimStmp <> B.TimStmp​
was ja auch soweit funktioniert
aber wie müsste die Abfrage lauten, wenn auf einer Seite die "AdrNumm" noch nicht vorhanden ist?

und bitte haut mich nicht, das ist noch im alten Visual-FoxPro
 
Werbung:
ich habe drei Arbeitsplätze, die über VPN überregional verbunden sind. Zum synchronisieren

Was soll da synchronisiert werden?

verwende ich folgendes Konstrukt
SELECT A.AdrNumm as A_ADRNUMM, A.TimStmp as A_TIMSTMP, ;
B.AdrNumm as B_ADRNUMM, B.TimStmp as B_TIMSTMP, ;
WHERE A.AdrNumm == B.AdrNumm AND A.TimStmp <> B.TimStmpwas ja auch soweit funktioniert

Glaube nicht, daß das funktioniert. Es ist syntaktisch falsch.
 
Was soll da synchronisiert werden?
eben die geänderten Datenbestände, Schlüssel = AdrNumm und Änderungserkennung der TimStmp


ok, ich hab die FROM und INTO-Zeilen mal rausgelassen und nur die relevanten Elemente ohne Zerr&Plumps dargestellt

hier mal der originalcode
SELECT SrcTab.TELADDR as S_TelAddr, SrcTab.TIMSTMP as S_TimStmp, SrcTab.TELPART as S_TelPart, ;
LocTab.TELADDR as L_TelAddr, LocTab.TIMSTMP as L_TimStmp, LocTab.TELPART as L_TelPart ;
FROM SrcTab, LocTab ;
INTO CURSOR L_Tem2 READWRITE ;
WHERE (SrcTab.TIMSTMP > LocTab.TIMSTMP) ;
.and. (SrcTab.TELADDR == LocTab.TELADDR)
 
Zuletzt bearbeitet:
Du müsstest dann so etwas machen

Code:
INSERT into deineTabelle
(
SELECT A.AdrNumm as A_ADRNUMM, A.TimStmp as A_TIMSTMP, ;
B.AdrNumm as B_ADRNUMM, B.TimStmp as B_TIMSTMP, ;
WHERE A.AdrNumm == B.AdrNumm AND A.TimStmp <> B.TimStmpwas
) AS t
ON DUPLICATE KEY UPDATE
   AdrNumm=VALUES(A_ADRNUMM), 
  TimStmp= VALUES(A_TIMSTMP),
und die anderen Felder genau so ...

Damit erreichst du das alle Records die bereits da sind geupdatet werden und alle anderen eingefügt.

Du kannst aber auch einfach von Percona pt_table_sync nehmen. damit lassen sich einfach per CLI Tabellen oder Datenbanken synchronisieren.

schau dir mal diese Seite an Download Percona Toolkit
 
danke für die Antwort, trotz Feiertag :D

leider kennt FoxPro die clause "ON DUPLICATE KEY" nicht. ist ja leider schon ewas in die tage gekommen und wird seit 2009 von M$ nicht mehr gepflegt.
das Problem aber ist, dass das Proggie noch ca. 3 Jahre leben muss und sich daher ein umschreiben in modernere Software (~2MJ) nicht in Frage kommt.

Gibt es eine alternative für nicht vorhandene Daten zu finden?
 
Nur so ein Gedanke:

Kannst du das Query nicht in eine Stored Procedure packen (eventuell noch etwas verbessert) und diese dann von FoxPro aufrufen.

Wenn du willst können wir gerne auch mal telefonieren und dann das Ergebnis Posten. Dabei kann man einfacher die vorhandenen Möglichkeiten abtesten.
 
Im Jahre 2017 eine Software zu nutzen, die seit 2009, also seit 8 Jahre, tot ist, ist schon etwas, ähm, leichtsinnig, oder?
naja, wenn man bedenkt, dass diese Software schon viel durchgemacht hat....

Urform wurde Mitte der 80'er mit DBASE/CLIPPER auf CP/M geschrieben..... davor war es ein zusammengewürfeltes Zeuchs aus Fortran, PL-M und dazwischen Assembler... später kam Noch Borland (TP) ins spiel

2001-2003 hab ich dann den ganzen Kram in VFP6 zusammengefasst und später unter VFP9 installiert.

soviel zur Geschichte...
 
Werbung:
Hast du meinen Vorschlag mit der Stored Procedur gesehen ?
ja, aber ihc hab mittlerweile einen anderen Mechanismus ausgraben können.
bei Kaltstart wird erstmal alles von den anderen Servern geholt. was ja eh schon immer so war.
daher kann ich mir den Zeitstempel der Partnerdatei VOR dem Erstladen merken. und wenn sich dieser Ändert nur noch die WHERE-Abfrage auf
Code:
..... ;
WHERE TIMSTMP >= FDATE(Partnerdatei,1) ;
.....
reduzieren. so hab ich auch alle neu eingetragenen Datensätze.

auf alle fälle dank für die Vorschläge

das macht es nicht besser.
Das ist klar, aber soll man wirklich das ganze Projekt wegen 2-einhalb Jahren zu 90% neu schreiben, wo es dann definitiv ausgemustert wird..... Dazu sind wirklich keine Finanzen mehr vorhanden
 
Zurück
Oben