Apagar registro dbGrid

MySQL

Delphi

Banco de Dados

24/03/2018

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

Curtidas 0

Respostas

Jerson Boer

Jerson Boer

24/03/2018

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.
GOSTEI 0
Michel

Michel

24/03/2018

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 ?
GOSTEI 0
Jerson Boer

Jerson Boer

24/03/2018

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
GOSTEI 0
Jerson Boer

Jerson Boer

24/03/2018

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.
GOSTEI 0
Michel

Michel

24/03/2018

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 ?
GOSTEI 0
POSTAR