 |
ActiveDelphi .: O site do programador Delphi! :.
|
Exibir mensagem anterior :: Exibir próxima mensagem |
Autor |
Mensagem |
will_pacini Aprendiz

Registrado: Quarta-Feira, 5 de Janeiro de 2011 Mensagens: 214
|
Enviada: Ter Mar 28, 2017 4:07 pm Assunto: Erro ao salvar registro com valor negativo |
|
|
Olá pessoal,
Estou com um problema inusitado,
Possuo o seguinte código:
Código: |
if dmProduto.cdsProdVendaESTOQUE.AsFloat > 0 then
begin
dsProduto.DataSet.Edit;
dmProduto.cdsProdVendaESTOQUE.AsFloat := dmProduto.cdsprodvendaESTOQUE.AsFloat - frmVendas.cdsQtd.AsFloat;
end
else
if dmProduto.cdsProdVendaESTOQUE.AsFloat < 0 then
begin
dsProduto.DataSet.Edit;
dmProduto.cdsProdVendaESTOQUE.AsFloat := dmProduto.cdsprodvendaESTOQUE.AsFloat + (-frmVendas.cdsQtd.AsFloat);
end
else
if dmProduto.cdsProdVendaESTOQUE.AsFloat = 0 then
begin
dsProduto.DataSet.Edit;
dmProduto.cdsProdVendaESTOQUE.AsFloat := dmProduto.cdsprodvendaESTOQUE.AsFloat + (-frmVendas.cdsQtd.AsFloat);
end;
dsProduto.DataSet.Post;
end;
dsItens_Venda.DataSet.Post;
dmProduto.cdsProdvenda.ApplyUpdates(0);
dsProduto.DataSet.Close;
|
Como podem ver, eu verifico se o estoque é negativo antes de dar baixa nele, já que muda a regra matemática,
Pois bem, se o estoque está positivo e a Qtd vendida deixará o estoque positivo ainda, o banco salva normalmente.
Se o estoque está positivo e a Qtd deixará o estoque negativo, salva normalmente também.
Se o estoque está negativo, salva também.
O problema é quanto o estoque está zero, quando zero ele da erro ao salvar, Update Affected more than 1 record, já pesquisei na internet e vi que esse erro é causado quando meu apply tenta salvar mais de um registro mas como podem ver no meu código não é esse o caso.
O código funciona em todas as situações, exceto quando o estoque está zero.
No banco quando está zero, é 0, não null.
Uso Firibird 2.5 + xe3 e meu campo estoque é Numerico no banco.
Agradeço se alguém me dar uma luz.
Obrigado. |
|
Voltar ao Topo |
|
 |
imex Moderador

Registrado: Sexta-Feira, 7 de Janeiro de 2011 Mensagens: 11666
|
Enviada: Ter Mar 28, 2017 4:30 pm Assunto: |
|
|
Boa tarde,
Como está a propriedade UpdateMode do DataSetProvider?
obs: acho que não tem relação com o problema, e não sei se deixar escapar alguma coisa, mas pelo que entendi esses Ifs para verificar se o estoque é maior, menor ou igual a zero não são necessários, pois a operação realizada nos 3 casos é a mesma (subtração da quantidade)
_________________
Assinatura: http://www.imoveisemexposicao.com.br/imoveis-venda-guarulhos!gopouva-residencial-apartamento |
|
Voltar ao Topo |
|
 |
will_pacini Aprendiz

Registrado: Quarta-Feira, 5 de Janeiro de 2011 Mensagens: 214
|
Enviada: Ter Mar 28, 2017 5:01 pm Assunto: |
|
|
imex escreveu: | Boa tarde,
Como está a propriedade UpdateMode do DataSetProvider?
obs: acho que não tem relação com o problema, e não sei se deixar escapar alguma coisa, mas pelo que entendi esses Ifs para verificar se o estoque é maior, menor ou igual a zero não são necessários, pois a operação realizada nos 3 casos é a mesma (subtração da quantidade)
_________________
Assinatura: http://www.imoveisemexposicao.com.br/imoveis-venda-guarulhos!gopouva-residencial-apartamento |
Imex, está como upWhereAll
Quanto aos 'ifs'
tinha apenas dois, verifica se o estoque é positivo ou não, pensei que era esse o problema e coloquei o terceiro if para conferir se o estoque é 0,
Se o produto for negativo e eu informar a quantidade de produto vendida, fica -10 + 8, aí o estoque fica -2 ao invés de -18, por isso que fiz a verificação do estoque,
Obrigado. |
|
Voltar ao Topo |
|
 |
imex Moderador

Registrado: Sexta-Feira, 7 de Janeiro de 2011 Mensagens: 11666
|
Enviada: Ter Mar 28, 2017 5:26 pm Assunto: |
|
|
A tabela que está sendo alterada possui uma chave primária (PK)?
Se possui, o(s) campo(s) da PK estão no ClientDataSet cdsProdvenda?
Voltando aos Ifs, pelo que vi em nenhum do 3 casos o estoque -10 com a quantidade 8 ficaria -2, pois no primeiro é feita a subtração (-10 - 8 = -18) e nos outros 2 é feita a soma de um número negativo (-10 + -8 = -18) que da no mesmo que subtrair. |
|
Voltar ao Topo |
|
 |
|
|
Enviar Mensagens Novas: Proibido. Responder Tópicos Proibido Editar Mensagens: Proibido. Excluir Mensagens: Proibido. Votar em Enquetes: Proibido.
|
|