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