Fórum Código do TRIGGER #282998

25/05/2005

0

Boa tarde,


Após muitas tentativas, consegui criar o meu 1º TRIGGER (AutoIncremental), mais não sei como utilizar no código fonte do programa.
Segue meu código:

CRIAÇÃO DO TRIGGER:

SET TERM !! ;

CREATE TRIGGER ´NOVO_REG_CONTAS´ FOR ´CONTAS_A_PAGAR´
ACTIVE BEFORE INSERT POSITION 0
AS
declare variable NovoNum integer;
begin
if (NovoNum is null) then NovoNum = 0;
Select Max(REGISTRO)+1 From CONTAS_A_PAGAR Into :NovoNum;
new.REGISTRO = :NovoNum;
end !!

SET TERM ;!!

SALVANDO APLICAÇÃO:
// Componente TIBDaset >> dm.CContas

dm.CContas.Post;
dm.CContas.ApplyUpdates;
dm.ibTransa.CommitRetaining;

insert into CONTAS_A_PAGAR
(REGISTRO,VENCIMENTO,DIA,NUM_DOCUMENTO,DESCRICAO,VALOR,FAVORECIDO,
OBS,N_CONTA_C,DOCUMENTO,RESPONSAVEL,PARCELA,
VALORPAGO,DATAPAGO,SALDO,STATUS)
values
(:REGISTRO,:VENCIMENTO,:DIA,:NUM_DOCUMENTO,:DESCRICAO,:VALOR,:FAVORECIDO,
:OBS,:N_CONTA_C,:DOCUMENTO,:RESPONSAVEL,:PARCELA,
:VALORPAGO,:DATAPAGO,:SALDO,:STATUS)


Alguém pode me ajudar em mais esta estapa ?


Vivendo Aprendendo

Vivendo Aprendendo

Responder

Posts

25/05/2005

Gandalf.nho

Primeiro eu sugiro uma alteração na trigger, através do uso de generators (o que é o mais recomendado). Primeiro crie o generator:

CREATE GENERATOR GEN_CONTAS_A_PAGAR;


Agora a trigger modificada:

SET TERM !! ; 
CREATE TRIGGER "NOVO_REG_CONTAS" FOR "CONTAS_A_PAGAR" 
ACTIVE BEFORE INSERT POSITION 0
AS
BEGIN
    if (new.REGISTRO is null) then 
       new.REGISTRO = GEN_ID(GEN_CONTAS_A_PAGAR, 1);
end !! 
SET TERM ;!! 


Como vc está usando IBDataSet diretamente, é só deixar os TFields como Required = False e deixar a trigger cuidar do resto.


Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar