Thema: Delphi IB-Transaktionen

Einzelnen Beitrag anzeigen

Hansa

Registriert seit: 9. Jun 2002
Ort: Saarland
7.554 Beiträge
 
Delphi 8 Professional
 
#7

Re: IB-Transaktionen

  Alt 27. Feb 2005, 12:24
Ihr betrachtet eine Transaktion IMHO zu sehr als eine Muliuser/Multitasking-Angelegenheit. Die machen aber auch in einer Einzelplatz Anwendung einen Sinn.

Es geht darum, entweder eine Reihe von Änderungen an der Datenbank alle durchzuführen oder keine. Beispiel Rechnung : Ich gebe Kunden-Nr. ein und dann ein paar Artikel und die Mengen. Was muß nun beim Speichern gemacht werden ? Die Mengen müssen vom Laberbestand abgebucht werde, es müssen für die Rechnungspositionen neue Datensätze angelegt werden, die Kunden und Artikelstatistik muß aktualisiert werden usw.

Dies könnte man z.B. alles machen, nach jeder Mengeneingabe. Wenn ich jetzt schlau bin, dann habe ich die Transaktion gestartet, schon bevor ich den ersten Artikel eingebe. Warum ? Ich habe mich nämlich vertan und für den falschen Kunden bereits 100 Rechn.-Positionen eingegeben, also sind zwar die 100 Lagerbestände richtig geändert, aber die Kundenstatistik usw. stimmt auf keinen Fall mehr. Ein DAU würde nun das alles noch einmal mit - eingeben (wenn das Programm das überhaupt zuläßt) und hoffen, daß er sich nicht vertut. Man könnte ihm aber helfen und ganz zum Schluß 2 kleine Buttons anzeigen, die er drücken muß : "alles speichern" und "alles rückgängig machen".

Was passiert jetzt im Fehlerfall mit den 100 Positionen bzw. im Programm ? In dem OnClick des einen Buttons steht einfach Transaction.Commit; Alles wird gespeichert und fertig. In dem zweiten steht Transaction.Rollback; Alle Änderungen seit dem Start der Transaction werden rückgängig gemacht. Egal welche Tabelle es betrifft. Äußerst wichtig ist hierbei der Startzeitpunkt der Transaktion bzw. wann committed wird !!

Vergesse ich nämlich nach vollendeter Eingabe zu committen, gebe noch 10 Rechnungen ein und dann die eine falsche, dann geht das nicht mehr so einfach. Ein Rollback würde nicht nur die falsche rückgängig machen, sondern auch die richtigen !!

Und aus solcherlei Gründen sollte man auch immer die Transactions möglich kurz halten. Die Lesevorgänge getrennt von den schreibenden in Transactions zu kapseln ist auch gut. Allerdings ist es nur echt wichtig, falls jemand DBgrids usw. für Anzeige- und für Eingabezwecke verwendet.
Gruß
Hansa
  Mit Zitat antworten Zitat