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 

Erro ao salvar registro com valor negativo

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


Registrado: Quarta-Feira, 5 de Janeiro de 2011
Mensagens: 214

MensagemEnviada: Ter Mar 28, 2017 4:07 pm    Assunto: Erro ao salvar registro com valor negativo Responder com Citação

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
Ver o perfil de Usuários Enviar Mensagem Particular
imex
Moderador
Moderador


Registrado: Sexta-Feira, 7 de Janeiro de 2011
Mensagens: 11666

MensagemEnviada: Ter Mar 28, 2017 4:30 pm    Assunto: Responder com Citação

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
Ver o perfil de Usuários Enviar Mensagem Particular
will_pacini
Aprendiz
Aprendiz


Registrado: Quarta-Feira, 5 de Janeiro de 2011
Mensagens: 214

MensagemEnviada: Ter Mar 28, 2017 5:01 pm    Assunto: Responder com Citação

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
Ver o perfil de Usuários Enviar Mensagem Particular
imex
Moderador
Moderador


Registrado: Sexta-Feira, 7 de Janeiro de 2011
Mensagens: 11666

MensagemEnviada: Ter Mar 28, 2017 5:26 pm    Assunto: Responder com Citação

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
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