Bon, j'ai suivis tes conseils et les indications de Transactions actives multiples, et ça semble marcher !
Voici mes composants :
FDConnection :
DriverName = IB
LoginPrompt = False
Params.Database = la base
Params.DriverID = IB
Params.Password = le mdp
Params.Port = 3050
Params.Protocol = ipLocal
Params.UserName = le login
TxOptions.AutoCommit = False
TxOptions.AutoStart = False (True, ça marche aussi)
TxOptions.AutoStop = False
TxOptions.DisconnectAction = xdRollback
TxOptions.EnableNested = True
Transaction = FDTransactionMaj << Et non pas FDTransactionSelect, sinon ça marche pas (je ne comprend pas pourquoi).
UpdateTransaction = FDTransactionMaj
FDGUIxWaitCursor
FDPhysIBDriverLink
FDTransactionSelect :
Connection = FDConnection
Options.AutoCommit = False
Options.AutoStart = False (True, ça marche aussi)
Options.AutoStop = False
Options.DisconnectAction = xdRollback
Options.EnableNested = True
Options.Isolation= xiReadCommitted
Options.ReadOnly = True
FDTransactionMaj :
Connection = FDConnection
Options.AutoCommit = False
Options.AutoStart = False (True, ça marche aussi)
Options.AutoStop = False
Options.DisconnectAction = xdRollback
Options.EnableNested = True
Options.Isolation= xiReadCommitted
Options.ReadOnly = False
FDQuery (pour les select):
Connection = FDConnection
Transaction = FDTransactionSelect
FDQueryMaj (pour manipulation de données):
Connection = FDConnection
UpdateTransaction = FDTransactionMaj
1 2 3
| // Juste après la connexion.
FDTransactionSelect.StartTransaction;
FDTransactionMaj.StartTransaction; |
1 2 3
| // A la fin.
FDTransactionSelect.Commit;
FDTransactionMaj.Commit; |
Envoyé par
Barbibulle
Performance et plus facile à gérer.
Interbase/firebird utilisent une transaction pour un simple select.
Personnellement, je ne trouve pas ça "plus facile". Être obligé de monter toute cette usine à gaz, juste pour pouvoir gérer proprement des transactions, moi je trouve ça bien compliqué pour pas grand chose.
pour ton aide et tes explications.
Partager