Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi [Firebild] Änderungen nach Insert gehen verloren (https://www.delphipraxis.net/95218-%5Bfirebild%5D-aenderungen-nach-insert-gehen-verloren.html)

mkinzler 4. Jul 2007 12:07

Re: [Firebild] Änderungen nach Insert gehen verloren
 
Nut bei der Table-Komponente oder grundsätzlich?

nachti1505 4. Jul 2007 12:47

Re: [Firebild] Änderungen nach Insert gehen verloren
 
Zumindest auch bei der FIBPlus DataSet-Komponente von Devrace....
Delphi-Quellcode:
Transaction.Commit
Schließt alle an der Transaktion hängenden DataSets....
Delphi-Quellcode:
Transaction.CommitRetaining
Lässt die DataSets offen... ist aber imho kein gelungener Programmierstil

Edith gratuliert mkinzler zu über 10.000 Beiträgen.

mkinzler 4. Jul 2007 12:49

Re: [Firebild] Änderungen nach Insert gehen verloren
 
Zitat:

Edith gratuliert mkinzler zu über 10.000 Beiträgen.
Danke Edith

TBx 4. Jul 2007 13:00

Re: [Firebild] Änderungen nach Insert gehen verloren
 
und es ist generell so, dass durch ein COMMIT oder ein Rollback sämtliche Datenmengen, die von der Transaction betroffen sind, geschlossen werden.

Gruß

onlinekater

BlueStarHH 4. Jul 2007 13:05

Re: [Firebild] Änderungen nach Insert gehen verloren
 
Zitat:

Zitat von onlinekater
und es ist generell so, dass durch ein COMMIT oder ein Rollback sämtliche Datenmengen, die von der Transaction betroffen sind, geschlossen werden.

OK, wenn das generell so ist, muss es doch auch eine einfache Möglichkeit geben, den Datensatz auszuwählen der vor einem Commit ausgewält war, wenn die Datenmenge wieder geöffnet wird.

alex517 4. Jul 2007 14:00

Re: [Firebild] Änderungen nach Insert gehen verloren
 
Hi,

Eine Transaktion ist in erster Linie eine "Sicht" auf die Daten.
Ein Select-Statements ist genauso an eine Transaktion gebunden wie ein
Insert/Update/Delete.
Die Datenmenge eines Select-Statements ist damit nur solange existent wie die Transaktion besteht.
Habe ich innerhalb ein und der selben Transaktion eine offene Datenmenge in Form eines TIBDataSet/TIBTable und
setzte ein Insert/Update/Delete-Stetment ab, welches durch ein Commit bestätigt wird, so ist die Transaktion beendet.
Damit ist auch Datenmenge im TIBDataSet/TIBTable nicht mehr gültig und TIBDataSet/TIBTable werden geschlossen.
Das gilt für alle Komponenten.


Zitat:

Zitat von BlueStarHH
OK, wenn das generell so ist, muss es doch auch eine einfache Möglichkeit geben, den Datensatz auszuwählen der vor einem Commit ausgewält war, wenn die Datenmenge wieder geöffnet wird.

Du mußt dir nur die ID des Satzes merken und nach dem erneuten Öffnen mit Locate zu diesem Satz gehen.
Für einen neuen Datensatz benötigts du die ID natürlich noch vor dem Insert.
Wie das geht, siehe hier, Punkt 3.


Zitat:

Zitat von nachti1505
Zumindest auch bei der FIBPlus DataSet-Komponente von Devrace....
Delphi-Quellcode:
Transaction.Commit
Schließt alle an der Transaktion hängenden DataSets....
Delphi-Quellcode:
Transaction.CommitRetaining
Lässt die DataSets offen... ist aber imho kein gelungener Programmierstil

FIBPlus-DataSets verwenden für das Lesen und Schreiben zwei verschiedene Transaktionen.
Die Schreib-Transaktion ist nur für den Moment des Scheibens aktiv und wird sofort mit einem HardCommit bestätigt.
CommitRetaining wird NICHT verwendet.
Das DataSet ist weiter offen da es unter der Lese-Tranaktion läuft.


alex


Alle Zeitangaben in WEZ +1. Es ist jetzt 18:23 Uhr.
Seite 2 von 2     12   

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