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