Hallo EdAdvokat,
weil b) mMn wirklich die einfachste, weil am schnellsten umsetzbare Lösung ist zeige ich dir mal wie SaveToTB dafür zu ändern ist. Es ist nicht ideal oder effektiv, es ist nur damit es läuft.
Das Vorgehen (auf dem Papier) ist dabei wie folgt:
1) Du lädst ja die Daten aus der
DB in die CustomerList. Hast du schon.
2) Dann bearbeitest du die Daten in der CustomerList oder du fügst neue hinzu oder löschst welche. Hast du schon.
3) Jetzt soll gespeichert werden, d.h. der Stand in der CustomerList soll jetzt in die
DB: Dazu:
3a) Lösche einfach den kompletten Inhalt der Tabelle in der
DB.
3b) Füge nun alles in der CustomerList wieder in die
DB.
Beachte bei 3b) das nun nur noch Insert-Statements gebraucht werden (da die
DB ja leer ist ist nichts upzudaten), aber es gibt Datensätze die bereits eine sinnvolle ID haben, die müssen mit einem anderen Statement Inserted werden
Delphi-Quellcode:
procedure TCustomerList.SavetoDB(con: TZConnection);
var
zqryMain: TZQuery;
i: Integer;
begin
zqryMain:=TZQuery.Create(nil);
try
zqryMain.connection:=con;
//Erst mal alles löschen:
zqryMain.SQL.Text:='Delete From WARENVERKAUF1'; // oder heißt es 'Delete * From WARENVERKAUF1'?
zqryMain.ExecSQL;
for I:= 0 to self.Count-1 do
begin
if self[i].ID>-1 then //Insert-Statement für bekannte Datensätze mit sinnvoller ID
zqryMain.SQL.text:='INSERT INTO WARENVERKAUF1(ID,KDNR,NAME,VORNAME,FIRMA,PRODUKT,ANZAHL,PREIS) ' +
'VALUES(:CID, :KNR, :NAM, :VNA, :FIR, :PRO, :ANZ, :PRE)';
else //Insert Statement für wirklich neue Datensätze
zqryMain.SQL.text:='INSERT INTO WARENVERKAUF1(KDNR,NAME,VORNAME,FIRMA,PRODUKT,ANZAHL,PREIS) '+
'VALUES(:KNR, :NAM, :VNA, :FIR, :PRO, :ANZ, :PRE)';
zqryMain.params.parseSQL(zqryMain.sql.text, True);
if self[i].ID>-1 then //Parameter ID wird nur in diesem Fall benötigt
zqryMain.Params.ParamValues['CID']:=self[i].ID;
//Restliche Parameter und ExecSQL wird eigentlich in beiden Fällen gleich benöigt
//darum habe ich die Doppelung aus deinem Code mal rausgemacht (DRY).
zqryMain.params.ParamValues['KNR']:=self[i].KDNR;
zqryMain.params.paramValues['NAM']:=self[i].Name;
zqryMain.params.paramValues['VNA']:=self[i].Vorname;
zqryMain.params.ParamValues['FIR']:=self[i].Firma;
zqryMain.Params.ParamValues['PRO']:=self[i].Produkt;
zqryMain.Params.ParamValues['ANZ']:=self[i].Anzahl;
zqryMain.params.paramValues['PRE']:=self[i].Preis;
zqryMain.ExecSQL;
end;
finally
zqryMain.Free;
end;
end;