Fórum Trigger com Parametros #39697
26/10/2003
0
Estou desenvolvendo um sistema para um aparthotel. Não posso permitir que o usuário cadastre uma reserva para um mesmo apartamento que já esteja ocupado no periodo. Tenho a seguinte trigger e estou com duas duvidas:
- Como passo uma variável como parâmetro da trigger???
- Como como trato a exception que criei no interbase no delphi?
O que acontece: Fiz a trigger sem a variável, ela funcionou, não permitia que eu salvasse os dados, mas não dava a mensagem de erro. Sendo que eu preciso passar a variável na trigger, então modifiquei. Porem não sei passar a variável, nem sei como tratar a exceção para exibir a mensagem... (Criei a ´EXCEPTION ERRO_APTO_OCUPADO´ no interbase)...
Segue a trigger
SET TERM !! ;
CREATE TRIGGER APTO_OCUPADO FOR TBHOSPEDAGEM
BEFORE INSERT AS
DECLARE VARIABLE APTOID INTEGER;
BEGIN
IF (
EXISTS (
SELECT TBHOSPEDAGEM.HSDATAENT,
TBHOSPEDAGEM.HSDATASAI,
TBAPTO.ID AS IDAPTO
FROM TBHOSPEDAGEM
INNER JOIN TBTIPOAPTO ON TBHOSPEDAGEM.HSTIPOAPTO = TBTIPOAPTO.ID
INNER JOIN TBAPTO ON TBTIPOAPTO.TPAPTO_ID = TBAPTO.ID
WHERE (
(NEW.HSDATAENT || ´12:01:00´) BETWEEN (HSDATAENT || ´12:00:00´) AND (HSDATASAI || ´12:00:00´)
OR (NEW.HSDATASAI || ´12:01:00´) BETWEEN (HSDATAENT || ´12:00:00´) AND (HSDATASAI || ´12:00:00´)
AND TBAPTO.ID = :APTOID
)
)
) THEN
EXCEPTION ERRO_APTO_OCUPADO;
END !!
SET TERM ; !!
Como já disse essa trigger serve para verificar se um determinado apartamento já está ocupado em um certo período (dataent e datasai).
Desde já agradeço.
Rafaelunp
Curtir tópico
+ 0Posts
27/10/2003
Rfpsatin
Não tem como passar parametro. trigger não ´é´ procedure nem function
- Como como trato a exception que criei no interbase no delphi?
vc pode associar ele a um evento e no Delphi usar o component ibevent p/ capturar este evento e disparar o q quiser.
Gostei + 0
27/10/2003
Afarias
para preencher uma VARIAVEL criada no escopo da trigger com um valor qualqer, apenas faça ::
VARIAVEL = VALOR;
se quer preencher com um valor de um campo da tabela que disparou a a trigger (do registro atual) faça ::
VARIAVEL = NEW.NOME_CAMPO; // ou OLD.NOME_CAMPO
se quer preencher com um valor de um campo da mesma tabela ou outra qualquer, user SELECT ... INTO ::
select campo_tal from tabela where codigo=tal_codigo
into :VARIAVEL;
|Como como trato a exception que criei no interbase no delphi?
use um bloco TRY...EXCEPT
try
IBDataSet1.Post;
except
// tratamento da exceção
end;
entretanto se vc usa MIDAS -- deve usar outros métodos como o evento OnReconcileError do ClientDataSet.
|O que acontece: Fiz a trigger sem a variável, ela funcionou, não permitia
|que eu salvasse os dados, mas não dava a mensagem de erro. Sendo {...}
A triger como está escrita não funciona, pois APTOID não tem valor então o SELECT nunca trará nada!
como (acredito) APTOID é um campo da tabela q disparou a trigger então, a variável é criada ´implicitamente´ pelo IB e deve ser referenciada como dito acima:: NEW.APTOID
select {bla bla bla} where campo_tal = new.aptoid {...}
T+
Gostei + 0
22/08/2008
N_informatica
segue abaixo o código fonte de uma trigger que criei baseado em seus exemplos.
SET TERM ^;
CREATE TRIGGER INSERE_PRODUTO_FORNECEDOR FOR FOR_COTA
ACTIVE AFTER INSERT POSITION 1
AS
DECLARE VARIABLE vITEM INTEGER;
DECLARE VARIABLE vCODIGOPRD INTEGER;
DECLARE VARIABLE vPRODUTO VARCHAR(50);
DECLARE VARIABLE vQUANTIDADE DOUBLE PRECISION;
BEGIN
FOR SELECT ITEM, CODIGOPRD, PRODUTO, QUANTIDADE
FROM IT_COTA
WHERE EMPRESA = NEW.EMPRESA
AND FILIAL = NEW.FILIAL
AND NUMERO = NEW.NUMERO
INTO :vITEM, :vCODIGOPRD, :vPRODUTO, :vQUANTIDADE
DO
BEGIN
INSERT INTO PRECOS VALUES (
NEW.EMPRESA,
NEW.FILIAL,
NEW.NUMERO,
NEW.FORNECEDOR,
:vITEM,
NEW.NOME_FORNECEDOR,
:vCODIGOPRD,
:vPRODUTO,
0,
:vQUANTIDADE,
0,
CURRENT_DATE,
USER
);
END
END
^
COMMIT WORK ^
SET TERM ;^
Gostei + 0
23/09/2016
Dirceu Morais
active after delete position 0
AS
declare variable id Integer;
begin
Select Max(id_cobranca) from log_cobranca l Where l.crempresa = old.crempresa
Into :id;
if (id is null) then
id = 1;
Else
id = Id + 1;
insert into log_cobranca (titulo,dataVencto, dataemissao,cliente,usuario)
values
(old.titulo, old.datavencto,old.dataemissao,old.cliente,old.usuario);
end;
-Estou precisando incluir neste LOG o código do usuário que fez a exclusão.
Como faço para buscar na tabela de usuário?
Tenho a tabela de COBRANCA, LOG_COBRANCA e USUARIO
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)