Thema: Kundenliste

Einzelnen Beitrag anzeigen

Jumpy

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

AW: Kundenliste

  Alt 20. Apr 2017, 13:38
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;
Ralph

Geändert von Jumpy (20. Apr 2017 um 13:44 Uhr) Grund: Kommentare ergänzt
  Mit Zitat antworten Zitat