Re: [firebase-br] Transação com várias tabelas ?

João Cezar da Fonseca Júnior joao.cezar em cultura.com.br
Sex Jan 14 15:44:04 -03 2005


Thiago

> isso está acontecendo porque a chave está sendo gerada no seu banco.
Sim.

> Modifique esta Trigger, ou a delete e faça o incremento do generator em 
> seu programa, atribua o valor resultante da operação anterior na pk da 
> tabela pai e na fk das tabelas filhas
O problema é que a sequencia de lancamentos é por empresa, para usar
generator eu teria de criar ele por empresa em tempo de execucao.

Outro problema que tenho é uma transação de contas a pagar onde o usuario
tem a opção de gerar outras parcelas da compra. Exemplo uma compra foi
parcelada
em 3 vezes, qdo o usuario vai confirmar o insert, ele informa o valor e
vencimento das
demais parcelas, com isso eu faço um laço inserindo os registros na tabela.
Preciso que
seja feito o commit apenas se todos os lancamentos forem gravados, que não
está sendo
possivel pois estou tendo de fazer um commit para cada lancamento, para
pegar a sequencia
na tabela de empresas.

Exemplo:

tbl_empresas                        // guarda a sequencia de lancamentos
tbl_ctas_pagar                     // pk=nro_lancto
tbl_ctas_pagar_filho1           // fk=nro_lancto
tbl_ctas_pagar_filho2           // fk=nro_lancto

Obs: Uma compra foi parcelada em 3 vezes, qdo o usuario vai confirmar o
insert,
        ele informa o valor e vencimento das demais parcelas, com isso eu
faço um
        laço inserindo os registros na tabela.
        Preciso que seja feito o commit apenas se todos os lancamentos forem
gravados.

CREATE TRIGGER CTAS_RECEBER_PAGAR_BI0 FOR TBL_CTAS_RECEBER_PAGAR
ACTIVE BEFORE INSERT POSITION 0
AS
DECLARE VARIABLE nProximoCodigo INTEGER;
begin
  /* Autoincremento do Lancto de Ctas a Receber / Pagar */
  SELECT ctasrecpag + 1 from tbl_ultimoscodigos
     WHERE
        tbl_ultimoscodigos.empresa = NEW.empresa AND
        tbl_ultimoscodigos.gerencial = NEW.gerencial
     INTO nProximoCodigo;
  UPDATE tbl_ultimoscodigos
     SET ctasrecpag = :nProximoCodigo
     WHERE
        tbl_ultimoscodigos.empresa = NEW.empresa AND
        tbl_ultimoscodigos.gerencial = NEW.gerencial;
  NEW.nro_lancto = :nProximoCodigo;
end





Mais detalhes sobre a lista de discussão lista