Bonjour,

C'est encore moi, je voudrais avoir dans la mesure du possible des informations complémentaires sur les transactions (startTransaction, commit, rollback etc...) en fait je début avec Interbase/Firebird (moins d'un mois)

En effet dans mon programme, je créé dynamiquement le composant Tibtransaction comme indiquer ci-dessous :
Je créer ce composant ou cette connexion lorsque que je démarre l'application.
My_DATABASE:=TIBDataBase.create(Nil);
My_DATABASE.DatabaseName := PTR_WORK_QUERY.REPERTOIRE_BDD;
My_DATABASE.SQLDialect := 3;
My_DATABASE.Params.Clear;
My_DATABASE.Params.Add('user_name=SYSDBA');
My_DATABASE.Params.Add('password=masterkey');
My_DATABASE.LoginPrompt := false;
My_DATABASE.Connected := true;

MY_SESSION_TRANSACTION:=TIBTransaction.create(Nil);
MY_SESSION_TRANSACTION.DefaultDatabase := My_DATABASE;
MY_SESSION_TRANSACTION.StartTransaction;
MY_SESSION_TRANSACTION.CheckInTransaction;
ensuite lors que je veux faire une SELECT ou un UPDATE ,INSERT etc.. je créer dynamiquement mon IBQUERY:

Database:= My_DATABASE ;
Transaction := MY_SESSION_TRANSACTION;
Close;
SQL.Clear;
SQL.Add(SQLTXT);
EXECSQL
Lorsque toutes mes mises à jour sont (MAJ de toutes les tables OK) je fait un commit:
MY_SESSION_TRANSACTION.Commit;
Puis le je détruit mon IBQUERY à la fin de toutes les transactions:
FreeAndNil(self);

Et c'est là que j'ai le problème, lorsqu'un autre exe lit la base de données.

  • Si l'EXE-2 s'est connecté avant le mise à jour de l'EXE-1 ==> Il (EXE-2) ne lit pas le MAJ sauf si je ferme EXE-2 et je redemmarre l'EXE-2
  • Si l'EXE-2 s'est connecté après la mise à jour de l'EXE-1 ==> il (EXE-2) lit bien la nouvelle donnée.


Pouvez-vous m'aider à y voir plus clair ?

je pense que que cela à pour origine le mode de connexion ou l'appel à la transaction.

Pensez vous que je doive faire comme suit:

My_DATABASE:=TIBDataBase.create(Nil);
My_DATABASE.DatabaseName := PTR_WORK_QUERY.REPERTOIRE_BDD;
My_DATABASE.SQLDialect := 3;
My_DATABASE.Params.Clear;
My_DATABASE.Params.Add('user_name=SYSDBA');
My_DATABASE.Params.Add('password=masterkey');
My_DATABASE.LoginPrompt := false;
My_DATABASE.Connected := true;

MY_SESSION_TRANSACTION:=TIBTransaction.create(Nil);
MY_SESSION_TRANSACTION.DefaultDatabase := My_DATABASE;
ensuite lors que je veux faire une SELECT ou un UPDATE ,INSERT etc.. je créer dynamiquement mon IBQUERY:

MY_SESSION_TRANSACTION.StartTransaction;
MY_SESSION_TRANSACTION.CheckInTransaction
;
Database:= My_DATABASE ;
Transaction := MY_SESSION_TRANSACTION;
Close;
SQL.Clear;
SQL.Add(SQLTXT);
EXECSQL
Lorsque toutes mes mises à jour sont (MAJ de toutes les tables OK) je fait un commit:
MY_SESSION_TRANSACTION.Commit;
Puis le je détruit mon IBQUERY à la fin de toutes les transactions:
FreeAndNil(self);

Cordialement
QAYS.