Zu 1)
Es sind alle Datensätze in der ListView und in der CutomerList auf dem gleichen Stand. Es wird dann die komplette Tabelle in der
DB geleert, d.h. darin sind keine Daten mehr, um dann im nächsten Schritt den kompletten Stand der CutomerList (so wie sie jetzt ist) in die
DB zu schreiben.
Zu 2)
Genau. Die Datensätze, die bereits eine ID haben (ungleich -1) sollen ja auch mit dieser ID in die
DB geschrieben werden, darum enthält das entsprechende Instert-Statement auch die ID und den Parameter :CID.
Zu 3)
Auch richtig. Hier hat der Datensatz noch keine ID (bzw. die ist ja -1). Daher wird beim Insert-Statement die ID weggelassen, wodurch die Datenbank automatisch eine ID vergibt.
Zu 4)
Hier habe ich nur versucht deinen Code zu verkürzen und Redundanz zu vermeiden. DRY (=Don't repeat yourself) ist so ein Programmierer Ding:
aus:
Delphi-Quellcode:
if self[i].ID>-1 then
begin
zqryMain.Params.ParamValues['CID']:=self[i].ID; //update
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 else
begin
zqryMain.params.ParamValues['KNR']:=self[i].KDNR; //insert
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;
wurde:
Delphi-Quellcode:
if self[i].ID>-1 then
zqryMain.Params.ParamValues['CID']:=self[i].ID;
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;
Ist doch viel kürzer, macht aber das selbe.
Zu 5)
Richtig verstanden.
Zu 6)
Zur Wiederholung: Würdige Datensätze
die bereits eine ID haben behalten diese, nur Unwürdige oder besser bisher Unbekannte bekommen eine neue ID. Genau das passiert, wie unter Zu2) und Zu3) beschrieben.
Grundsätzlich ist es natürlich auch möglich Datensätze über die ID selektiv zu löschen, aber dann muss man sich auch vorher merken, welche Datensätze das sind, und da hast du im jetzigen Stand deines Programmes keine Struktur für vorgesehen.
Schau dir nochmal in #64 meinen Vorschlag d) an. Da musst du dir mal gut überlegen (auf'm Papier) was man dazu machen müsste um das umzusetzen und wo man alles was ändern müsste. Das ist eigentlich gar nicht so viel und du solltest das schaffen können. Es würde dein Programm in der Performance - gerade beim Speichern - um einiges verbessern.