TSQLQuery: CancelUpdates vs. Cancel

Für Themen zu Datenbanken und Zugriff auf diese. Auch für Datenbankkomponenten.
Antworten
Joh
Lazarusforum e. V.
Beiträge: 191
Registriert: Sa 26. Mai 2012, 17:31
OS, Lazarus, FPC: Win 10 (L 2.2.6 x64 FPC 3.2.2)
CPU-Target: 64Bit

TSQLQuery: CancelUpdates vs. Cancel

Beitrag von Joh »

Moin,

mir fällt gerade auf, das TSQLQuery neben CancelUpdates auch noch die Cancel-Methode von TDataSet hat...

Für mich scheint es so zu sein, das Cancel die Änderungen des aktuellen Datensatzes zurücksetzt, CancelUpdates hingegen Änderungen aller betroffenen Datensätze einer Query.

Bei Cancel wird aber das AfterCancel-Event gefeuert. Den würde ich gerne nutzen.

Oder sitze ich da gerade auf ganz dünnem Eis und merke gerade nicht, das ich sang- und klanglos untergehe?
just my two Beer

Frickler
Beiträge: 5
Registriert: Di 28. Feb 2023, 16:10

Re: TSQLQuery: CancelUpdates vs. Cancel

Beitrag von Frickler »

Was ist Deine Frage? Ob "CancelUpdates" für jeden einzelnen Datensatz "Cancel" aufruft, wobei Du dann "AfterCancel" nutzen kannst?

Das ist nicht so. "CancelUpdates" geht den ganzen Stack an Änderungen (einfügen, löschen, ändern) an Datensätzen durch und macht alle Änderungen rückgängig. "Cancel" bricht die aktuelle "Edit", "Append" oder "Insert" Operation ab.

Joh
Lazarusforum e. V.
Beiträge: 191
Registriert: Sa 26. Mai 2012, 17:31
OS, Lazarus, FPC: Win 10 (L 2.2.6 x64 FPC 3.2.2)
CPU-Target: 64Bit

Re: TSQLQuery: CancelUpdates vs. Cancel

Beitrag von Joh »

Die Frage / Idee war:
macht Cancel die Änderungen am aktuellen Datensatz rückgängig
und CancelUpdates alle Änderungen einer Query.

Beispiel Rechnungskopf:
Cancel revertiert (!) alle Änderungen im Datensatz Re 1234
CancelUpdates macht beim Rechnungskopf das gleiche, da die Änderungen nur diesen einen Datensatz betreffen.
=> ich kann Cancel statt CancelUpdates benutzen, habe den Vorteil der Methode OnCancel.

Beispiel Rechnungspositionen:
CancelUpdates revertieren alle Änderungen aller Rechnungspositionen.
Cancel revertiert nur die Änderung im aktuellen Datensatz.

=> Beim Rückgängigmachen einer Rechnung muß ich für den Kopf nur RechnungsQuery.Cancel aufrufen und für die Positionen RechnungspositionenQuery.CancelUpdates.
just my two Beer

Frickler
Beiträge: 5
Registriert: Di 28. Feb 2023, 16:10

Re: TSQLQuery: CancelUpdates vs. Cancel

Beitrag von Frickler »

Isso.

Cancel ist das Gegenstück zu Post und bricht ein Append, Insert oder Edit ab,
Cancel bezieht sich immer auf den aktuellen Datensatz.
CancelUpdates ist das Gegenstück zu ApplyUpdates und nimmt alle per "Post" bzw. "Delete" (sowie "AppendRecord", "InsertRecord") gemachten Änderungen zurück.
CancelUpdates bezieht sich auf alle Änderungen in allen Datensätzen der aktuellen Query.

Wenn Du "AfterCancel" nicht brauchst, geht also auch CancelUpdates statt Cancel.

Aber Vorsicht! Wenn Du beim Rechnungskopf den aktuellen Datensatz wechselst, wird implizit ein Post ausgeführt. Dann kannst Du nur per CancelUpdates zurücknehmen.
Das Speichern könnte man aber abfangen via BeforePost, indem etwa eine Boolean Variable "JetztSpeichern" abgefragt wird, und ist sie nicht "true", dann wird mit "Abort" das Speichern abgebrochen.

Antworten