Thema: Delphi Datenbank updaten

Einzelnen Beitrag anzeigen

Gambit

Registriert seit: 28. Mai 2003
680 Beiträge
 
Delphi 7 Professional
 
#1

Datenbank updaten

  Alt 7. Apr 2005, 12:37
Datenbank: MySQL • Version: 4 • Zugriff über: ZEOS
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
  Mit Zitat antworten Zitat