Bonjour à tous, (

Mon problème est le suivant :

Dans Firebird, je lève une exception pour une valeur existant déja dans la base :

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
SET TERM ^ ;
 
CREATE OR ALTER PROCEDURE GESTION_EQUIPE (
    mode char(1),
    id_eq smallint,
    lib_eq char(10))
returns (
    code_id_eq type of id_eq$)
as
BEGIN
    /*------------*/
    SELECT ID_EQ FROM TB_EQ
    WHERE LIB_EQ=TRIM(UPPER(:LIB_EQ))
    INTO :CODE_ID_EQ;
   IF (not(ID_EQ IS NULL) AND ((MODE<>'I') or (MODE<>'M'))) THEN
        BEGIN
            EXCEPTION eq_existe;
        END
    else
        BEGIN
            /*------------*/
            IF (MODE='I')   THEN       /* insertion*/
            ...............
Ma PS fonctionne bien, mais je n'arrive pas à catcher l'exception sous DELPHI !

sous DELPHI le message est le suivant :


Sous DELPHI :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
 
Try
	DB.Connected:=True;
	Transaction.Active:=true;
	PS_1.ExecProcedure('GESTION_EQUIPE',['I',1,'VAC1']);
             except
	   on e:EFIBError  do
		begin
		  Transaction.Rollback;
                            showMessage(e.message);
		   showMessage(IntToStr(e.sqlcode));
		end;
	end;
Le code affiche :
exception .
exception 2.
EQ_EXISTE.
Essai
At procedure 'GESTION_EQUIPE' line: 15, col: 13.

puis
-836.

En mettant n'importe quelle exception dans firebird, le SQLCode est toujours -836, seul le message change !

Comment puis je intercepter l'exception EQ_EXISTE dans delphi

Faut il plutôt que je pense à un traitement dans la PS qui me retourne une valeur si le LIB_EQ existe déja ?