Thema: Kundenliste

Einzelnen Beitrag anzeigen

EdAdvokat

Registriert seit: 1. Mai 2016
Ort: Berlin
419 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#55

AW: Kundenliste

  Alt 19. Apr 2017, 17:56
Vielen Dank für die vielen Hinweise, die ich z.T. jedoch noch nicht verarbeiten kann. Ich konzentriere mich zunächst darauf die SaveToDB-procedure ordentlich zum laufen zu bekommen und dann werde ich mich an die Hinweise zur Verbsserung des Programms machen. Meine Versuche mit dem Debugger zu arbeiten waren durchwachsen. Ich habe den Hinweis mit dem Haltepunkt beachtet und mit F8 Zeile für Zeile geprüft. Er durchlief tatsächlich nur die update-Routine und nicht Insert. Die Prüfung in der LoadFromDB ob clear tatsächlich keinen Datensatz mehr hat war für mich sehr unübersichtlich, denn ich weiss gar nicht was ich da wo suchen sollte.
Nun erst einmal zum Ergebnis SaveToDB hier die jetzige Fassung, hoffentlich richtig:
Delphi-Quellcode:
procedure TCustomerList.SavetoDB(con: TZConnection);
var
  zqryMain: TZQuery;
  i: Integer;
begin
  zqryMain:=TZQuery.Create(nil);
  try
    zqryMain.connection:=con;

for I:= 0 to self.Count-1 do
begin
   if self[i].ID>-1 then
     zqryMain.SQL.Text:='UPDATE WARENVERKAUF1 SET KDNR=:KNR, NAME =:NAM, VORNAME=:VNA, FIRMA=:FIR, PRODUKT=:PRO, ANZAHL=:ANZ, PREIS=:PRE WHERE ID=:CIDelse
     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
   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;
end;

  finally
    zqryMain.Free;
  end;
end;
Damit kann ich einen hinzugefügten Datensatz(der als ID zunächst -1 hat) speichern und dann wieder laden und er hat dann eine ID der Datenbank, so wie es sein sollte. Auch das Bearbeiten eines bestehenden Datensatzes und das Speichern klappt. Nach Laden mit LoadFromDB ist der geänderte Datensatz sichtbar. Nur nach dem Löschen von Datensätzen und Speichern erscheint nach LoadFromDB oder Neustart des Programms wieder der gelöschte Datensatz. Das bekomme ich einfach nicht hin.
Ich hätte noch so viele Fragen, aber zunächst soll das Hauptproblem gelöst werden. Ist die Procedure wirklich richtig????
Im Hauptformular rufe ich mit dem Button löschen die Routine auf: CustomerList.Delete(lvCustomer.Selected.Index); hier wird doch der ausgewählte Datensatz aus der objectlist gelöscht. Danach wird fülleListview aufgerufen. Das ist doch auch i.o.
Wenn ich wüßte wie ich mit dem Debugger diese Problematik prüfen könnte. Da er ja tatsächlich auch sichtbar den Datensatz aus der Liste löscht, jedoch beim Speichern ihn wohl nicht gelöscht speichert, erscheint er danach wieder.
Norbert
  Mit Zitat antworten Zitat