procédure stockée trigger et exception avec delphi et IB6 OS
:idea:
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:
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:
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:
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:
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+