Deadlock firebird dans une application delphi

cs_thierrylp Messages postés 8 Date d'inscription vendredi 4 juin 2004 Statut Membre Dernière intervention 18 janvier 2010 - 29 déc. 2009 à 02:42
cs_cantador Messages postés 4720 Date d'inscription dimanche 26 février 2006 Statut Modérateur Dernière intervention 31 juillet 2021 - 18 janv. 2010 à 16:20
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.
{*--------------------------------------------------------------------------------------------------
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;
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.


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

3 réponses

cs_cantador Messages postés 4720 Date d'inscription dimanche 26 février 2006 Statut Modérateur Dernière intervention 31 juillet 2021 13
15 janv. 2010 à 12:26
bonjour,
l'application est-elle locale ?

cantador
0
cs_thierrylp Messages postés 8 Date d'inscription vendredi 4 juin 2004 Statut Membre Dernière intervention 18 janvier 2010 1
18 janv. 2010 à 06:33
Bonjour
Non ce sont deux applications identiques qui appellent une base de donnée distante
0
cs_cantador Messages postés 4720 Date d'inscription dimanche 26 février 2006 Statut Modérateur Dernière intervention 31 juillet 2021 13
18 janv. 2010 à 16:20
l'erreur deadlock n'est pas fréquente mais quand cela arrive il faut fermer l'application pour la relancer.

c'est vrai que ce n'est pas fréquent..

je suppose que tu as verifié les
paramètres d'isolation ?

cantador
0
Rejoignez-nous