Re: [firebase-br] Trigger - bloco For Select não está sendo executado

Andrei Luís compuvale.software em gmail.com
Sex Nov 10 08:51:57 -03 2006


Ops... continuando...

E consequentemente, a Trigger é disparada quando PedidosItens ainda
não está populada.

Enfim, vou ver o que fazer, se faço uma trigger em PedidosItens, ou se
trato isso na aplicação.

[]
Andrei


2006/11/10, Andrei Luís <compuvale.software em gmail.com>:
> Obrigado pela resposta Valdir.
>
> Pois é, quando botei a cabeça no travesseiro ontem também cheguei a
> essa conclusão: "E se estiver sendo gravado Pedidos antes de
> PedidosItens".
>
> "Se", porque na prática isso não acontece, quer dizer, não por vontade
> do usuário. Explico: Utilizo Delphi + IBO com os devidos
> relacionamentos na IB_Querys. Na query dos Pedidos utilizo a
> propriedade GeneratorLinks para pegar o valor do generator, e com isso
> a FK que está em PedidosItens é automaticamente alimentada a cada
> .Insert que se faz.
>
> Bem, a seqüência dos comandos é a seguinte:
>
> 1 - qrPedidos.Insert;
> 2 - digitação de dados: Cliente, Forma de Pagamento, Vendedor, etc.
> 3 - qrPedidosItens.Insert
> 4 - digitação de dados: Produto, Qtde, Preço de Venda, etc.
> 5 - qrPedidosItens.Post
> 6 - qrPedidos.Post
>
> Logo, pela lógica, o Trigger que está em Pedidos, é executado depois
> de qrPedidos.Post, não? Só que não é o que acontece. O IBO faz o
> Insert no banco na tabela Pedidos, imediatamente antes do passo  5
> (qrPedidosItens.Post), mas no Delphi, o qrPedidos continua em modo de
> inserção.
>
> Em 09/11/06, Valdir Marcos<valdir.marcos em ig.com.br> escreveu:
> > Você colocou o gatilho na tabela Pedidos, mas procura registros na tabela
> > PedidosItens.
> > Lembre-se que primeiro você insere um registro na tabela Pedidos (onde está
> > o seu gatilho), para depois inserir os registros na tabela PedidosItens, ou
> > seja, o seu gatilho é executado antes de existirem registros na tabela
> > PedidosItens...
> > Para atualizar o estoque, o melhor é você criar os gatilhos (after insert,
> > before delete e after update) na tabela de PedidosItens.
> >
> > Um abraço,
> >
> > Valdir
> >
> >
> > ----- Original Message -----
> > From: "Andrei Luís" <compuvale.software em gmail.com>
> > To: "Firebase" <lista em firebase.com.br>
> > Sent: Thursday, November 09, 2006 6:52 PM
> > Subject: [firebase-br] Trigger - bloco For Select não está sendo executado
> >
> >
> > Olá para todos.
> >
> > Seguinte, considerem a seguinte trigger:
> >
> > CREATE TRIGGER PEDIDOS_AI0 FOR PEDIDOS
> > ACTIVE AFTER INSERT POSITION 0
> > AS
> > DECLARE VARIABLE WPEDIDO_ID INTEGER;
> > DECLARE VARIABLE WPRODUTO_ID INTEGER;
> > DECLARE VARIABLE WQTDE NUMERIC(9,2);
> > DECLARE VARIABLE WVALOR NUMERIC(9,2);
> > DECLARE VARIABLE WCLIENTE_ID INTEGER;
> > begin
> >    if (new.TIPO='VALE') then
> >       begin
> >          wpedido_id = new.registro_id;
> >          insert into teste Values(:wpedido_id,  0);
> >
> >          For Select produto_id, qtde, valor, cliente_id
> >                from pedidosItens
> >                where pedido_id = :wpedido_id
> >                into :wproduto_id, :wqtde, :wvalor, :wcliente_id
> >             do
> >             begin
> >                insert into teste Values(new.registro_id, 1);
> >                update produtos set estoque = estoque - :wqtde
> >                   where registro_id=:wproduto_id;
> >
> >             end
> >
> >       end
> > end
> >
> > Estou utilizando o IBExpert + FB 1.5.2.
> >
> > Tabela Pedidos:
> > PK  Registro_id
> >
> > Tabela PedidosItens
> > PK Registro_id
> > FK Pedido_id
> >
> > A idéia é após o insert na tabela Pedidos, que o estoque dos produtos
> > seja atualizado, caso o campo TIPO seja = 'VALE'.
> > Coloquei as linhas Insert Into Teste... para rastrear o que está
> > acontecendo. O problema é que o que está dentro do For Select, não
> > está sendo executado. Testei o Select no SQL Editor e ele retorna as
> > linhas corretamente. O primeiro Insert Into teste, está gravando
> > corretamente o PK da tabela pedido (Registro_id).
> >
> >
> > Não sei o que está me escapando... Alguém faz idéia do que acontece?
> >
> > --
> > []s
> > Andrei
> >
> > Win XP Pro + D2006 Pro + FB 1.5.2 + IBO 4.6B




Mais detalhes sobre a lista de discussão lista