Bonjour,
Je parcours les forums et tutoriels firebird pour trouver le problème de code ou d'implémentation pour les composants ibx.
J'ai une application qui captent des informations de passage de véhicules.
Cette application scrute 8 voies de passage via un middleware industriel.
Pour chaque passage détecté j'appelle une procédure de création de passage qui met en forme des informations et qui appelle une procédure stocké me renvoyant un identifiant de passage.
Pour cela dans mon data module , jai placé un composant TIBDATABASE, un TIBTRANSACTION et pour l'appel de ma procédure stocké un IBBSTOREDPROC et un TIBTRANSACTION.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33 {*-------------------------------------------------------------------------------------------------- Description : fonction permettant d'appeler une procedure stocquée de la bdd en passant son nom @param stockproc nom de la procédure stoquée dans la base de donnée @return identifiant generé par la procedure stockée appelé en parametre @Author Thierry Lopez-Pacheco @Version 2005/01/17 TLP V0.1 InitialVersion @Version 2005/04/22 TLP V0.2 AdminVersion ---------------------------------------------------------------------------------------------------} function TmiMonitDataModule.getident(stockproc: string): integer; begin connectionbddExt; with ibsGenId do begin if ibtGenId.Active then ibtGenId.Commit; ibtGenId.StartTransaction; StoredProcName := uppercase(stockproc); try begin ibsGenId.ExecProc; ibtGenId.Commit; end; except on E: Exception do begin ibtGenId.Rollback; showmessage('impossible de retourner identifiant passge'); Cancel; abort; end; end; end; result := ibsGenId.Params[0].AsInteger; end;
Ensuite pour chaque passage j'appelle une procédure différente ou j'utilise à chaque fois un TIBSQL avec un TIBtransaction pour l'insertion dans la table des passage.
l'erreur deadlock n'est pas fréquente mais quand cela arrive il faut fermer l'application pour la relancer.
Je pense que mon implémentation de composant ou de code n'est pas bonne.
Pouvez vous me guider.
Salutations
Partager