slt

voila j'ai une table IB composé d'une clé IDREGION et d'un champ NOMREGION de type caractère.
J'ai écrit un trigger sur cette table, qui incrémente la clé pour chaque nouveau insert.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
 
CREATE TRIGGER TRG_CLE FOR TABLE_REGION ACTIVE  BEFORE INSERT  POSITION 0
AS
begin
 if (new.IDREGION is null) then
    NEW.IDREGION=GEN_ID(GEN_CLE,1);
end
j'ai écrit l'exception
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
 
create exception COUCOU 'Impossible';
J'ai écrit une procédure stockée qui insère la valeur pour le champ NOMREGION, et qui lève une exception lorsque le champ NOMREGION est dupliqué.
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
 
CREATE PROCEDURE ADD_REGION (
  NOMREGION char(50))
RETURNS(
  ESSAI char(50))
AS
DECLARE variable test integer;
begin
  test=0;
  SELECT IdREgion 
  FROM Table_Region 
  WHERENomRegion=:NomRegion 
  INTO:test;
  if (test<>0) then
    begin
        EXCEPTION coucou;
   end
   INSERT INTO Table_Region (NomRegion) VALUES (:NomREgion);
   suspend;
end
********************************************
Dans DELPHI STD4 j'exécute la procédure stockée:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
 
procedure TForm1.Button1Click(Sender: TObject);
begin
 MaTable.Active:=false;
 maproc.ParamByName('NOMREGION').asString:=edit1.Text;
 Maproc.Prepare;
  matrans.StartTransaction;
  maproc.ExecProc;
  matrans.Commit;
 MaTable.Active:=True;
end;
***************************************
Quand le champ NOMREGION n'est pas dupliqué, mon insert fonctionne bien.
Quand j'essais de dupliquer une valeur pour NOMREGION, l'exception est lévé, mon application delphi affiche ds une fenètre :

exception 1079524496
.
exception1.
Impossible

Ma question est la suivante : pourquoi le message d'erreur n'est pas tout simplement : "impossible" ?

Nb : je pense que vous aller me poser la question suivante:
Pourquoi ne pas mettre la clé sur le champ NOMREGION ?
Ma réponse est : parce que je pense qu'une recherche sur un champ de type integer est plus rapide qu(une recherche sur un champ de type caractere de 50 !
Ai je raison ?
Merci
a+