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

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


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
>
>
>
> ______________________________________________
> FireBase-BR (www.firebase.com.br) - Hospedado em www.locador.com.br
> Para editar sua configuração na lista, use o endereço http://mail.firebase.com.br/mailman/listinfo/lista_firebase.com.br
> Para consultar mensagens antigas: http://firebase.com.br/pesquisa
>


-- 
[]s
Andrei

Win XP Pro + D4 Pro / D2006 Pro + FB 1.5.2 + IBO 4.6B




Mais detalhes sobre a lista de discussão lista