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.
j'ai écrit l'exception
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 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 create exception COUCOU 'Impossible';
********************************************
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+
Partager