cs_thierrylp
Messages postés8Date d'inscriptionvendredi 4 juin 2004StatutMembreDernière intervention18 janvier 2010
-
29 déc. 2009 à 02:42
cs_cantador
Messages postés4720Date d'inscriptiondimanche 26 février 2006StatutModérateurDernière intervention31 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