Thema: Kundenliste

Einzelnen Beitrag anzeigen

Hobbycoder

Registriert seit: 22. Feb 2017
955 Beiträge
 
#53

AW: Kundenliste

  Alt 19. Apr 2017, 08:08
Du hättest als erstes mal die Möglichkeit einen Haltepunkt am Anfang der SaveToDB-Routine zu setzen, und mit F8 mal schrittweise durchzusteppen. Dann schaust du dir erst mal den Wert von CustomerList.Count an, ob der überhaupt bei 2000 liegt, bzw. sich jedes mal verdoppelt.
Dann würde ich mal einen Blick auf die ID werfen. Wenn die >-1 ist, springt er auf das richtige SQL-Statement (Update)? Oder macht er womöglich immer ein insert?

Du kannst auch mal folgendes Probieren. Setze eine Haltepunkt auf die Zeile zqryMain.Params.ParamValues['ID']:=self[i].ID; . Diese wird ja nur bei einem Insert aufgerufen. Dann Programm starten, DB Laden und direkt danach wieder speichern. Da kein Datensatz neu ist, dürfte ja kein Insert auftreten und die Zeile nie angesprochen werden. Sollte das doch der Fall sein, stimmt ja was mit der ID nicht.

Weiterhin könntest du noch mal die Routine LoadFromDB anschauen. Werden da wirklich vor dem Laden alle Object von der CustomerList gelöscht (CustomerList.Clear)? Wenn nicht, würde das bedeuten, dass er immer alles Datensätze beim laden anhängt, und dann hättest du nach dem Laden immer 1000 mehr (Sofern 1000 in der DB sind).

Warum überhaupt gleich 1000 Datensätze zum Testen/Debuggen? Das macht das ganze doch eher unübersichtlich und langwierig. Fang mit einem Datensatz an. Laden, Editieren, Speicher und wieder Laden. Sind es dann 2? Auch das löschen und Hinzufügen zum testen wäre mit weniger Datensätzen schneller erledigt. Im Normalfall gilt, was mit 10 Datensätzen fehlerfrei läuft, läuft auch mit 1000 und 10000.
Vielleicht baust du dir auch eine Statuszeile ein, in der die CustomerList.Count steht, und nach jeder Aktion aktualisiert wird.

Aber damit du nicht ewig suchst, dein Fehler in der SaveToDB. Genauer beim zqryMain.sql.text:=. Wenn ID=-1 dann lädst du das Update und wenn ID>-1 dann verwendest du Insert. Das ist logischerweise verkehr herum. Beim Bestücken der Parameter machst du es dann aber wieder richtig.
Aber du hast noch andere Fehler drin, die dir später noch viel Kopfzerbrechen bereiten werden.

Geändert von Hobbycoder (19. Apr 2017 um 08:21 Uhr)
  Mit Zitat antworten Zitat