Apagar registro dbGrid

24/03/2018

0

Estou fazendo um sistema de vendas e fiz o estoque debitar ao adicionar o produto no caixa com os comandos:

      dmcantina.ztrProdutos.Active;
      dmcantina.ztrProdutos.Edit;
      dmcantina.ztrProdutosp_peso.Value := dmcantina.ztrProdutosp_peso.Value - dsvendaitem.dataset.fieldbyname('vi_peso').Value;
      dmcantina.ztrProdutos.Post;


Só que o usuário também tem a opção de apagar o produto do caixa então para fazer o upload da tabela precisa clicar em confirmar para executar o seguinte comando:

      dmcantina.ztrProdutos.ApplyUpdates;


Comando para apagar o item do dbgrid:

      if dsvendaitem.DataSet.IsEmpty then
      begin
      showmessage ('Registro vazio');
      end
      else
      begin
      dsvendaitem.DataSet.Delete;
      end;


Estava funcionando bem, até eu perceber que se eu colocasse dois items e removesse um ao confirmar a venda com dmcantina.ztrProdutos.ApplyUpdates;
os dois items são debitados do estoque...
já quebrei a cabeça bastante e não acho uma maneira de resolver isso.

Se alguém puder me dar um luz e fico muito grato =D
Michel

Michel

Responder

Posts

25/03/2018

Jerson Boer

Olá Michel, uma sugestão, porque ao invés de vincular atualizações de estoque com ações de delete diretamente no DBGrid você não o faz através de consultas SQL de update/delete na tabela ou informação que deseja atualizar? Desta forma, você pode estruturar diversas ações de atualização na própria query e depois somente dar um refresh na sua grid para buscar a nova condição da venda.
Responder

25/03/2018

Michel

Obrigado pela sugestão Jerson, porém não sei como faze-lo estruturei todo o meu código em cima das Query do Zeos faço todas as operações por elas não vejo como mudar toda e estrutura para trabalhar com os códigos diretamente no SQL e também não vejo como isso pode me ajudar nessa questão pois ainda teria que debitar do estoque e depois repor... pode me esclarecer e me orientar ?
Responder

25/03/2018

Jerson Boer

Pelo que entendi no seu primeiro código postado você faz um débito do produto da quantidade que está vendida no item, faz através de um edit/update/post, certo?

Fazendo da forma que imagino, seu código seria uma consulta query que passe as informações como parâmetro, por exemplo:

update produto set volumetotal = volumetotal - :pPesoItem where IDProduto = :pIDProduto


Você passa isso pro componente do Zeos que executa query e depois passa os valores como parâmetros, mais ou menos assim:

ComponenteZeos.parametro(pPesoItem).Value := dsvendaitem.dataset.fieldbyname('vi_peso').Value;
ComponenteZeos.parametro(pIDProduto).Value := dsvendaitem.dataset.fieldbyname('idproduto').Value;
ComponenteZeos.execute;

Este código em um botão, irá debitar o estoque somente do item que estiver selecionado. A vantagem é que em uma mesma query você pode colocar outras ações, por exemplo:

> atualiza o volume total
> atualiza o item da venda para excluído
> atualiza o valor dos pedidos

Você pode colocar todas as atualizações necessárias na mesma query, executando as em sequência
Responder

25/03/2018

Jerson Boer

Complementando, veja um exemplo do que digo desta mudança de retirar de componentes fixos e levar para uma query:

Um programador fez em um projeto meu uma regra de validação de cliente, veja quantas condições existiam:

https://drive.google.com/open?id=1A46CGmb_DA5XWRIWiKiJSgZOw8HcxPDb

Quando fiz uma revisão de conceito e mudei para querys:

https://drive.google.com/open?id=1V83G3-dQXp8F4zAIMgHRVL2AGLmrsnxt

Uma única consulta checa todas as condições necessárias e me retornar Sim ou Não:

https://drive.google.com/open?id=14dFWK0wu_Bh1kG-FKUdyXnlbJ3pMb-qx

O mesmo conceito acredito que você possa aplicar em seu projeto, desta forma, não fica com as atualizações fixas em uma grid.
Responder

26/03/2018

Michel

Bom eu fiz o componente zeos com o update que você me passou, ele atualiza a tabela certinho. porém quando eu for apagar o produto do meu dbgrid para ele regressar ao estoque, como vou pegar o id do produto para passar por parâmetro ?
Responder

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar