Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   reihenfolge für StartTransaction (https://www.delphipraxis.net/187234-reihenfolge-fuer-starttransaction.html)

Luckner 10. Nov 2015 14:46

Datenbank: Firebird • Version: 2. • Zugriff über: Dataset

reihenfolge für StartTransaction
 
Hallo,
bin etwas verunsichert, weil ich schon seit Jahren den SQL-Befehl "StartTransaction" benutze und seid kurzem, auch in diesem Forum, gelesen habe "Ein StartTransaction macht man prinzipiell vor dem Einfügen der Daten". Ich mache es hinterher, wie auf dem Bespiel unten. Wie ist es dann richtig.
Delphi-Quellcode:
     begin
       DatamoduleAuftrag.DataModule2.IBDataSetGridAuftrag.Locate('ID', LabelID.Caption, []);

       DatamoduleAnwenderHistorie.DataModule7.IBDatabaseAnwenderHistorie.Open;
       DatamoduleAnwenderHistorie.DataModule7.IBDataSetAnwenderHistorie.Open;
       DatamoduleAnwenderHistorie.DataModule7.IBDataSetAnwenderHistorie.Append;

       DatamoduleAnwenderHistorie.DataModule7.IBDataSetAnwenderHistorieID.AsInteger := 1;
       DatamoduleAnwenderHistorie.DataModule7.IBDataSetAnwenderHistorieDATUM.Value := Date;
       DatamoduleAnwenderHistorie.DataModule7.IBDataSetAnwenderHistorieANWENDER.AsString := Anwender;
       DatamoduleAnwenderHistorie.DataModule7.IBDataSetAnwenderHistorieID_AUFTRAG.AsInteger := StrToInt(LabelID.Caption);

       DatamoduleAnwenderHistorie.DataModule7.IBDataSetAnwenderHistorie.Post;
       if DatamoduleAnwenderHistorie.DataModule7.IBTransactionAnwenderHistorie.InTransaction then DatamoduleAnwenderHistorie.DataModule7.IBTransactionAnwenderHistorie.Commit;
       DatamoduleAnwenderHistorie.DataModule7.IBDatabaseAnwenderHistorie.Open;
       DatamoduleAnwenderHistorie.DataModule7.IBTransactionAnwenderHistorie.StartTransaction;
       DatamoduleAnwenderHistorie.DataModule7.IBDatabaseAnwenderHistorie.Close;
     end
Danke, Luckner

Bambini 10. Nov 2015 14:49

AW: reihenfolge für StartTransaction
 
Das macht man auf jeden Fall "vor" dem Einfügen, Löschen und Ändern.
Abgeschlossen wird dies mit Commit bzw. Rollback.

mkinzler 10. Nov 2015 14:52

AW: reihenfolge für StartTransaction
 
Unter FireBird wird alles (auch Abfragen) in einem Transaktionskontext ausgeführt.
In Deinem Fall erzeugst Du dann eine weitere Transaktion.

Luckner 10. Nov 2015 14:57

AW: reihenfolge für StartTransaction
 
Erzeugt ein "Append" unter Firebird automatisch ein StartTransacktion oder muss ich das davor setzen?

Luckner.

mkinzler 10. Nov 2015 14:59

AW: reihenfolge für StartTransaction
 
Das kommt darauf an, was eingestellt ist. da kein Fehler angezeigt wird, wohl ja.

baumina 10. Nov 2015 15:01

AW: reihenfolge für StartTransaction
 
- Du solltest besser über FieldByName die Werte ins Dataset schreiben.
- Transaktionen zeitlich kurz halten (ich vermute, dass du nach Starttransaktion auf Benutzereingaben wartest, das ist zu vermeiden)
- Transaktionen machen dann Sinn, wenn du mehrere inserts oder updates (evtl. in verschiedenen Tabellen) machst, die unbedingt gemeinsam passieren müssen, weil sonst die Datenkonsistenz nicht übereinstimmt

mkinzler 10. Nov 2015 15:04

AW: reihenfolge für StartTransaction
 
Liste der Anhänge anzeigen (Anzahl: 1)
Ich habe gerade nachgesehen, die Standardeinstellungen bei IBX ist der automatische Start von Transaktionen

Luckner 10. Nov 2015 15:10

AW: reihenfolge für StartTransaction
 
Danke für die Erklärung. Ein Append wird ein StartTransaction automatisch erzeugen (muß ich noch ausprobieren), weil es keinen Fehler gibt. Ohh, dann habe ich lange Zeit Müll gemacht. Jetzt schnell Alles korrigieren.

Danke mkinzler fürs Nachschauen. Das erklärt einiges.

Gruß, Luckner.

mkinzler 10. Nov 2015 15:11

AW: reihenfolge für StartTransaction
 
Zitat:

Zitat von baumina (Beitrag 1321033)
- Transaktionen machen dann Sinn, wenn du mehrere inserts oder updates (evtl. in verschiedenen Tabellen) machst, die unbedingt gemeinsam passieren müssen, weil sonst die Datenkonsistenz nicht übereinstimmt

Wie gesagt bei FireBird muss alles in Transaktionen ausgeführt werden.
Man sollte sich entscheiden, ob man diese Steuerung automatisch (AutoStart, AutoCommit) oder manuell (StartTransAction/ Commit bzw. RollBack) ausführen will


Alle Zeitangaben in WEZ +1. Es ist jetzt 05:30 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz