[firebase-br] EXCEPTION C/ PARAMETROS

Mário Reis secretariadogeral em acra.pt
Ter Nov 21 23:16:39 -03 2006


Olá Pessoal,

Detesto a EXCEPTION standart do Firebird/interbase porque  não lhe podemos 
passar parametros. Lembrei então que poderia fazer uma
função que fizesse: "Raise Exception.Create(Format(minha_ms,TipoErro,[meu 
array de substituição]) (a seguir vai a source)
Vejo a UDF mas quando vou compilar o meu Gatilho/triger o sistema nao o vê 
obviamente pq estou a fazer qq coisa mal sem no entanto conseguir perceber o 
quê?!

CREATE TRIGGER PESSOAS_BI_VALNIF FOR PESSOAS
ACTIVE BEFORE INSERT OR UPDATE
POSITION 3
AS
DECLARE VARIABLE NIF_OK CHAR(1) CHARACTER SET WIN1252;
DECLARE VARIABLE NEW_VAR VARCHAR(254) CHARACTER SET WIN1252;
BEGIN
  /* Trigger body */
 If (NEW.NIF IS NOT NULL) THEN
  begin
   IF (NEW.NIF<>'') then
    begin
     -- Execute Procedure nif_is_valid NEW.NIF Returning_values nif_ok;
     nif_ok='T';
      IF (nif_ok<>'T') then
        new_var=MR_ERRO('O %S meu %S erro %S de %S teste','mtInfo', 
NEW.NIF )
         -- odeio-> EXCEPTION NIF_INVALIDO   ;
    end
  end

END^

Antes a Função na mr_udf.dll:
function MR_ERRO(sMsg, sM, sMs:String):String ; cdecl; export;
Var MyMsg:String;
 mtIcon: TMsgDlgType;
begin
        mtIcon := mtInformation ;
        If sM = 'ERRO' Then
           mtIcon := mtError ;
         If sM = 'INFO' Then
           mtIcon := mtInformation ;
         If sM = 'AVISO' Then
           mtIcon := mtWarning ;
         If sM = 'CONF' Then
           mtIcon := mtConfirmation ;

  MyMsg:= DateTimeToStr(Now)+' < '+Format(sMsg,[sMs]);
  Raise Exception.Create(MyMsg);
  Result := MyMsg ;


end;

Depois o SQL registando a External UDF no Firebase
declare external function mr_erro
cstring(254),cstring(4), cstring(254)
returns cstring(254)
entry_point 'mr_erro' module_name 'mr_udf';

Alguem pode ajudar-me a descobrir onde para a asneira?
Obrigado
Mário

PS - Fica a ideia se alguém + experiente a optimizar Excelente mas, diga-nos







Mais detalhes sobre a lista de discussão lista