Thema: Kundenliste

Einzelnen Beitrag anzeigen

Jumpy

Registriert seit: 9. Dez 2010
Ort: Mönchengladbach
1.733 Beiträge
 
Delphi 6 Enterprise
 
#75

AW: Kundenliste

  Alt 21. Apr 2017, 09:08
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.
Ralph
  Mit Zitat antworten Zitat