Hallo,
ich habe zwei Datenbanken, nenen wir sie mal DBMain und DBTmp.
DBMain wird mit Hilfe von DBTmp erstellt. Beide haben einen Integer als Primärschlüssel.
Beim ersten Erstellen von DBMain werden Daten inclusive Primärschlüssel aus DBTmp ausgelesen und mittells
SQL-Insert in DBMain eingefügt.
In regelmäßigen Abständen wird DBTmp aktualisiert, dabei werden sowohl bestehende Datensätze geändert und es kommen auch neue Datensätze dazu.
Nun möchte ich nach einer Aktualisierung von DBTmp natürlich auch DBMain aktualisieren. Ich könnte dazu natürlich DBMain komplett droppen und aus DBTmp neu aufbauen. Das will ich aber nicht sondern ich möchte die Datensätze die in DBTmp geändert wurden auch in DBMain ändern und neue Datensätze aus DBTmp ebenfalls zu DBMain hinzufügen.
Dazu habe ich mir folgendes überlegt:
Delphi-Quellcode:
begin
ZQueryTmp.SQL.Clear;
ZQueryTmp.SQL.Add('select * from Tbl_Tmp order by ID asc');
ZQueryTmp.Open;
ZQueryMain.SQL.Clear;
ZQueryMain.SQL.Add('select * from tbl_Main order by No asc');
ZQueryMain.Open;
ZQueryTmp.First;
for i:= 1 to ZQueryMain.RecordCount do
begin
ZQueryMain.SQL.Clear;
ZQueryMain.SQL.Add('Update tbl_DBMain set No = '+ZQueryTmp.fieldByName('ID').AsString)+','+
...+
' where No = '+ ZQueryTmp.fieldByName('ID').AsString);
ZQueryMain.ExecSQL;
ZQueryTmp.Next;
end;
while not ZQueryTmp.Eof do
begin
ZQueryMain.SQL.Clear;
ZQueryMain.SQL.Add('Insert into tbl_DBMain Values('+ ZQueryTmp.fieldByName('ID').AsString+','+
...+')');
ZQueryMain.ExecSQL;
ZQueryTmp.Next;
end;
end;
Die erste Schleife läuft (Anzahl Datensätze DBMain)-mal durch und aktualisiert alle Datensätze mit Hilfe von DBTmp und die zweite Schleife macht praktisch dort weiter, wo es in DBTmp neue Datensätze gibt und fügt sie DBMain hinzu.
Meine Frage: Da ja die Datensätze aufsteigend nach Primärschlüssel sortiert vorliegen, könnte man das so machen? Oder habe ich was wichtiges vergessen?
Gruß
Gambit