Bonjour,

Ayant commencé à développer en Delphi depuis quelques semaines, j'ai quelques soucis/interrogations concernant les interactions entre des composants "data-aware" et une base de données de type Firebird.

Voici le contexte:

Dans une application, j'utilise un composant de type "TcxGrid" avec une vue de type "TcxGridDBTableView". Ce sont des composants de la librairie "DevExpress". (J'imagine que l'interaction entre ces composants et la base de données sont les mêmes qu'avec TDBGrid .. A confirmer ?)

Dans mon module de données, j'ai un composant de type "TIBDatabase" et un autre de type "TIBTransaction" ainsi qu'un "TIBDataSet" et un "TDataSource". Mon "TcxGridDBTableView" est rattaché à mon "TDataSource" qui lui meme est rattaché à mon "TIBDataSet". Ce "TIBDataSet" à une propriété 'Transaction' ; je lui ai attribué le "TIBTransaction" nommé plus haut.

Mon problème réside surtout sur la compréhension des transactions.
Mes questions :

1) Dans l'événement "AfterPost" de mon "TIBDataSet", je lance ce bout de code :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
 
  Try
    IBTransaction_Ecran.Commit;
  finally
    IBTransaction_Ecran.Rollback;
  End;
En faisant ce commit, le dataset relié a la transaction est fermé. Il faut donc le ré-ouvrir pour qu'il soit à nouveau affiché (et que l'utilisateur puisse travailler). Le problème est que si le dataset doit recharger à chaque fois un gros volume de données, l'appli ne risque-t-elle pas d'être inutilisable ? De plus, si on a plusieurs datasets reliés au même composant "TIBTransaction" tous ceux-ci seront également fermé et ils devront être tous ré-ouvert. Doit-on faire un composant transaction par dataset ?

2) Pour palier ce problème, il y a la possibilité d'utiliser "CommitRetaining" afin de conserver la transaction. De ce cas-là, les datasets attachés au "TibTransaction" ne seront pas fermé. Mais si plusieurs utilisateurs sont connecté sur l'application, les modifications apportées par un utilisateur ne sera pas visible pour les autres.

3) Sur plusieurs forums, j'ai pu lire qu'il fallait un composant de Transaction pour les fonctions "read" de la "TcxGrid" et un autre composant transaction pour les modifications (insert, update, delete). Est-ce possible ? Si oui, comment dois-je proceder ? Il n'y a qu'une propriété "Transaction" sur le "TIBDataSet".

4) J'ai egalement lu sur certains forums, qu'il fallait définir la transaction en "readCommited". Est-ce le cas et pourquoi ?

J'ai essayé de chercher, via google et autres, des tutoriels ou exemples qui donnent des "good practices" sur les transactions et les composants "data-aware" mais je n'ai malheureusement rien trouvé. En connaissez-vous ? Je serais ravi d'en savoir plus.
Je suis aussi à la recherche de livre sur Delphi afin de me perfectionner et d'en connaitre plus. Connaissez-vous des ouvrages qui traitent de ces problèmes ? Ou même des ouvrages indispensable pour tout développeur Delphi.

Merci d'avoir lu ce pavé !

En vous remerciant d'avance pour toutes aides ou réponses, je vous souhaite une bonne journée.

Chro.