[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