ActiveDelphi - Índice do Fórum ActiveDelphi
.: O site do programador Delphi! :.
 
 FAQFAQ   PesquisarPesquisar   MembrosMembros   GruposGrupos   RegistrarRegistrar 
 PerfilPerfil   Entrar e ver Mensagens ParticularesEntrar e ver Mensagens Particulares   EntrarEntrar 

Trigger com select Duvida

 
Novo Tópico   Responder Mensagem    ActiveDelphi - Índice do Fórum -> Banco de Dados
Exibir mensagem anterior :: Exibir próxima mensagem  
Autor Mensagem
fabiodocs
Novato
Novato


Registrado: Quarta-Feira, 21 de Fevereiro de 2007
Mensagens: 11

MensagemEnviada: Qua Fev 21, 2007 9:55 am    Assunto: Trigger com select Duvida Responder com Citação

O problema se concentra no seguinte , tenho duas tabelas, a primeira resumo_venda, a segunda detalhe_venda, sendo que na primeira existe um campo totalvenda e na segunda um campo totalitem, sendo que as duas tem um campo em comum que é o controlevenda, tenho que fazer uma trigger que seja disparada toda vez que a tabela detalhe for alterada para atualizar a tabela resumo....tentei de diversas formas a ultima foi assim :

AS
begin
new.total = new.quantidade * new.unitario;
select sum ( total ) from detalhe_venda where detalhe_venda.controle_venda = new.controle_venda into :i;
update resumo_venda set resumo_venda.valortotal = :i where resumo_venda.controle = detalhe_venda.controle_venda;
end


Mas não obtive sucesso.....peço a gentileza de quem puder me ajudar..
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
thomazs
Moderador
Moderador


Registrado: Segunda-Feira, 1 de Março de 2004
Mensagens: 2835

MensagemEnviada: Qua Fev 21, 2007 1:44 pm    Assunto: Responder com Citação

tente no after insert algo do tipo:

Código:
as
  declare variable  valor numeric(15,2);
begin
  select sum ( total ) from detalhe_venda
  where detalhe_venda.controle_venda = new.controle_venda into :valor;
  update resumo_venda set resumo_venda.valortotal = :valor
  where resumo_venda.controle = new.controle_venda;
end

_________________
Suporte e Consultoria em Desenvolvimento de Sistemas
Bacharel em Sistemas de Informação
Especialista em Bancos de Dados
Desenvolvimento: Clipper, Delphi, PHP, Python/Django
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular MSN Messenger
fabiodocs
Novato
Novato


Registrado: Quarta-Feira, 21 de Fevereiro de 2007
Mensagens: 11

MensagemEnviada: Qua Fev 21, 2007 2:26 pm    Assunto: Responder com Citação

Valeu pela dica....estava mesmo pensando em algo do tipo, consegui com o seguinte codigo tambem....


AS
begin
update resumo_venda set resumo_venda.valortotal = ( resumo_venda.valortotal - detalhe_venda.total ) where resumo_venda.controle = new.controle_venda;
update detalheviagem set detalheviagem.vendido = ( detalheviagem.vendido - old.quantidade) where detalheviagem.controleviagem = new.movimento and detalheviagem.codigoproduto = new.codigo_prod;
new.total = new.quantidade * new.unitario;
update detalheviagem set detalheviagem.vendido = ( detalheviagem.vendido + new.quantidade) where detalheviagem.controleviagem = new.movimento and detalheviagem.codigoproduto = new.codigo_prod;
update detalheviagem set detalheviagem.retorno = ( detalheviagem.totunidades - detalheviagem.vendido ) where detalheviagem.controleviagem = new.movimento and detalheviagem.codigoproduto = new.codigo_prod;
update resumo_venda set resumo_venda.valortotal = ( resumo_venda.valortotal + new.total ) where resumo_venda.controle = new.controle_venda;
end


Ficou meio extenso mas atualiza as tabelas que preciso, só não consegui colocar um commit junto ao trigger por isso os valores só são atualizaos quando fecho e abro a tabela .....Tem jeito de colocar um commit direto no trigger ?
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
thomazs
Moderador
Moderador


Registrado: Segunda-Feira, 1 de Março de 2004
Mensagens: 2835

MensagemEnviada: Qua Fev 21, 2007 2:38 pm    Assunto: Responder com Citação

O commit deve ser dado na aplicação. O firebird ainda não suporta commi's dentro de ações do banco (triggers, stored procedures, etc).
Se tiver usando ibx, é só indicar no componente IbTransacion

ibTransaction1.Commit;

ou

ibTransaction1.CommitRetaining;
_________________
Suporte e Consultoria em Desenvolvimento de Sistemas
Bacharel em Sistemas de Informação
Especialista em Bancos de Dados
Desenvolvimento: Clipper, Delphi, PHP, Python/Django
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular MSN Messenger
fabiodocs
Novato
Novato


Registrado: Quarta-Feira, 21 de Fevereiro de 2007
Mensagens: 11

MensagemEnviada: Qua Fev 21, 2007 2:54 pm    Assunto: Responder com Citação

Blz, cara agradeço muito tua ajuda, usei o esquema indicado por vc, ajudou bastante, fico grato, quanto ao commit tomei como solução colocar no dataset da tabela detalhes no evento after post uma rotina para fechar e abrir o dataset resumo, assim consegui com poucas linhas acertar um item que sera usado no sistema inteiro, agora desse jeito não preciso mais me preocupar com totais....Mas uma vez muito obrigado. Vou marcar como resolvido este topico.
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
Mostrar os tópicos anteriores:   
Novo Tópico   Responder Mensagem    ActiveDelphi - Índice do Fórum -> Banco de Dados Todos os horários são GMT - 3 Horas
Página 1 de 1

 
Ir para:  
Enviar Mensagens Novas: Proibido.
Responder Tópicos Proibido
Editar Mensagens: Proibido.
Excluir Mensagens: Proibido.
Votar em Enquetes: Proibido.


Powered by phpBB © 2001, 2005 phpBB Group
Traduzido por: Suporte phpBB