Apagar registro dbGrid
Estou fazendo um sistema de vendas e fiz o estoque debitar ao adicionar o produto no caixa com os comandos:
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:
Comando para apagar o item do dbgrid:
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
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
Curtidas 0
Respostas
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
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
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:
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
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
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.
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
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