Bonjour,
Dans mon formulaire , j'ai un composant TIBDatabase et un composant TIBSQL qui sont associés á un même composant TIBTransaction.
Le composant TIBDatabase alimente un TDBGrid avec le contenu d'une table et le composant TIBSQL me sert à faire des insertions sur cette même table. Le SGBD utilisé est Firebird.
Les transactions du composant TIBDatabase sont gérées automatiquement alors que pour le composant TIBSQL, j'initie et ferme mes transactions selon le modèle ci-dessous :
Le pb est le suivant :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 FRM_Login.OuvrirTransaction(IBSQL_cadastro.Transaction); try IBSQL_cadastro.SQL.Clear; IBSQL_cadastro.SQL.Append('insert into CATEGORIAS (CAT_ID, CAT_NOME, CAT_DTCAD) '); IBSQL_cadastro.SQL.Append('select max(CAT_ID)+1, :nome, cast(''TODAY'' AS DATE) from CATEGORIAS'); IBSQL_cadastro.ParamByName('nome').AsString := Edit_novaCat.Text; IBSQL_cadastro.ExecQuery; IBSQL_cadastro.Close; IBSQL_cadastro.Transaction.Commit; except on E: Exception do IBSQL_cadastro.Transaction.Rollback; end;
Je modifie un champs dans le TDBGrid (TIBDatabase) et ensuite je fais une insertion (TIBSQL).
Si l'insertion génére une erreur, cela exécute un Rollback. Jusqu'ici tout va bien mais le problème est que le Rollback de la transition du TIBSQL supprime la modification que j'ai faite dans le TDBGridet qui est dans la transaction du TIBDatabase.
N'y a-t-il pas un moyen de contrôler toutes les transactions 100% par le code et non pas par les composants ?
Cyril.
Partager