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 

[RESOLVIDO] Duvidas, soma DBEdit

 
Novo Tópico   Responder Mensagem    ActiveDelphi - Índice do Fórum -> Delphi
Exibir mensagem anterior :: Exibir próxima mensagem  
Autor Mensagem
thallesvssouza
Novato
Novato


Registrado: Sábado, 1 de Outubro de 2016
Mensagens: 18

MensagemEnviada: Sáb Out 01, 2016 2:57 am    Assunto: [RESOLVIDO] Duvidas, soma DBEdit Responder com Citação

Boa Noite Amigos!
Estou com uma pequena duvida, estou criando uma tela de "Faturamento de Ordem de Serviço", nela eu tenho as forma de pagamento "DINHEIRO, CHEQUE, CHEQUE-PRÉ, CARTÃO, CARTÃO PARCELADO, CRÉDITO EMPRESA", aonde vai ser informado a forma de pagamento e seu valor correspondente até ser igual o valor da O.S.
Porem, eu tenho um DBEdit para cada forma para digitar o valor e faço uma soma aonde exibo em um PANEL:
public
{ Public declarations }
procedure somatotal;
end;

procedure TF_FaturamentoPedido.somatotal;
begin
PanelTotalRecebido.Caption := FloatTOSTR ( StrToFloat(DBEditDinheiro.Text) + StrToFloat(DBEditCheque.Text) + StrToFloat(DBEditChequePre.Text) + StrToFloat(DBEditCartaoDebito.Text) + StrToFloat(DBEditCartaoCredito.Text) + StrToFloat(DBEditCreditoParcelado.Text) + StrToFloat(DBEditCreditoEmpresa.Text));
end;

procedure TF_FaturamentoPedido.DBEditCreditoParceladoExit(Sender: TObject);
begin
somatotal;
end;

procedure TF_FaturamentoPedido.DBEditDinheiroExit(Sender: TObject);
begin
somatotal;
end;

procedure TF_FaturamentoPedido.DBEditCartaoCreditoExit(Sender: TObject);
begin
somatotal;
end;

procedure TF_FaturamentoPedido.DBEditCartaoDebitoExit(Sender: TObject);
begin
somatotal;
end;

procedure TF_FaturamentoPedido.DBEditChequeExit(Sender: TObject);
begin
somatotal;
end;

procedure TF_FaturamentoPedido.DBEditChequePreExit(Sender: TObject);
begin
somatotal;
end;

procedure TF_FaturamentoPedido.DBEditCreditoEmpresaExit(Sender: TObject);
begin
somatotal;
end;

Nisto eu tenho um problema, por ser DBEdit, quando eu digito um valor e saio do DBEdit ele apresenta uma mensagem de: " is not a valid floating point value.
Ele apresenta essa mensagem, porque ele tenta somar um valor com um campo VAZIO.
Minha duvida é, como posso contornar está situação?
Agradeço desde já, desculpe pelo texto longo, é que sou iniciante, mais já tentei buscar em outros lugares uma solução, porem não achei.


Editado pela última vez por thallesvssouza em Sáb Out 01, 2016 3:05 pm, num total de 1 vez
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
anderbelluno
Colaborador
Colaborador


Registrado: Quarta-Feira, 23 de Novembro de 2011
Mensagens: 1030
Localização: Cianorte-PR

MensagemEnviada: Sáb Out 01, 2016 3:17 am    Assunto: Responder com Citação

simples:
Código:
if DbEdit.text = '' then
Begin
 DbEdit.text:= 0;
end;


veja se isso te ajuda.
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
thallesvssouza
Novato
Novato


Registrado: Sábado, 1 de Outubro de 2016
Mensagens: 18

MensagemEnviada: Sáb Out 01, 2016 3:23 am    Assunto: Responder com Citação

anderbelluno escreveu:
simples:
Código:
if DbEdit.text = '' then
Begin
 DbEdit.text:= 0;
end;


veja se isso te ajuda.


uma duvida, como eu tenho varios dbedit, como eu informo todos?
Tentei da seguinte forma:
Código:

procedure TF_FaturamentoPedido.somatotal;
begin
//PanelTotalRecebido.Caption := FloatTOSTR ( StrToFloat(DBEditDinheiro.Text) + StrToFloat(DBEditCheque.Text) + StrToFloat(DBEditChequePre.Text) + StrToFloat(DBEditCartaoDebito.Text) + StrToFloat(DBEditCartaoCredito.Text) + StrToFloat(DBEditCreditoParcelado.Text) + StrToFloat(DBEditCreditoEmpresa.Text));
if (DBEditDinheiro.text = '') or (DBEditCheque.text = '') or (DBEditChequePre.text = '') or (DBEditCartaoDebito.text = '') or (DBEditCartaoCredito.text = '') or (DBEditCreditoParcelado.text = '') or (DBEditCreditoEmpresa.text = '')  then
Begin
(DBEditDinheiro.text := '0') or (DBEditCheque.text := '0') or (DBEditChequePre.text := '0') or (DBEditCartaoDebito.text := '0') or (DBEditCartaoCredito.text := '0') or (DBEditCreditoParcelado.text := '0') or (DBEditCreditoEmpresa.text := '0');
end;
PanelTotalRecebido.Caption := FloatTOSTR ( StrToFloat(DBEditDinheiro.Text) + StrToFloat(DBEditCheque.Text) + StrToFloat(DBEditChequePre.Text) + StrToFloat(DBEditCartaoDebito.Text) + StrToFloat(DBEditCartaoCredito.Text) + StrToFloat(DBEditCreditoParcelado.Text) + StrToFloat(DBEditCreditoEmpresa.Text));
end;

Porem não deu certo, o mesmo retorna:
[DCC Error] U_FormaPagamento.pas(178): E2015 Operator not applicable to this operand type
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
anderbelluno
Colaborador
Colaborador


Registrado: Quarta-Feira, 23 de Novembro de 2011
Mensagens: 1030
Localização: Cianorte-PR

MensagemEnviada: Sáb Out 01, 2016 6:29 am    Assunto: Responder com Citação

Código:

if DBEditDinheiro.Text ='' then
 begin
  DBEditDinheiro.Text := 0;
 end;

if DBEditCheque.Text ='' then
 begin
  DBEditCheque.Text := 0;
 end;

if DBEditChequePre.Text ='' then
 begin
  DBEditChequePre.Text := 0;
 end;

if DBEditCartaoDebito.Text ='' then
 begin
  DBEditCartaoDebito.Text := 0;
 end;

if DBEditCartaoCredito.Text ='' then
 begin
  DBEditCartaoCredito.Text := 0;
 end;

if DBEditCreditoParcelado.Text ='' then
 begin
  DBEditCreditoParcelado.Text := 0;
 end;

if DBEditCreditoEmpresa.Text ='' then
 begin
  DBEditCreditoEmpresa.Text := 0;
 end;

depois vc faz a soma
Código:

PanelTotalRecebido.Caption := FloatTOSTR ( StrToFloat(DBEditDinheiro.Text) + StrToFloat(DBEditCheque.Text) + StrToFloat(DBEditChequePre.Text) + StrToFloat(DBEditCartaoDebito.Text) + StrToFloat(DBEditCartaoCredito.Text) + StrToFloat(DBEditCreditoParcelado.Text) + StrToFloat(DBEditCreditoEmpresa.Text));

uma forma meio "grossa" na minha opniao, mas deve funcionar.
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
thallesvssouza
Novato
Novato


Registrado: Sábado, 1 de Outubro de 2016
Mensagens: 18

MensagemEnviada: Sáb Out 01, 2016 3:04 pm    Assunto: Responder com Citação

anderbelluno escreveu:
Código:

if DBEditDinheiro.Text ='' then
 begin
  DBEditDinheiro.Text := 0;
 end;

if DBEditCheque.Text ='' then
 begin
  DBEditCheque.Text := 0;
 end;

if DBEditChequePre.Text ='' then
 begin
  DBEditChequePre.Text := 0;
 end;

if DBEditCartaoDebito.Text ='' then
 begin
  DBEditCartaoDebito.Text := 0;
 end;

if DBEditCartaoCredito.Text ='' then
 begin
  DBEditCartaoCredito.Text := 0;
 end;

if DBEditCreditoParcelado.Text ='' then
 begin
  DBEditCreditoParcelado.Text := 0;
 end;

if DBEditCreditoEmpresa.Text ='' then
 begin
  DBEditCreditoEmpresa.Text := 0;
 end;

depois vc faz a soma
Código:

PanelTotalRecebido.Caption := FloatTOSTR ( StrToFloat(DBEditDinheiro.Text) + StrToFloat(DBEditCheque.Text) + StrToFloat(DBEditChequePre.Text) + StrToFloat(DBEditCartaoDebito.Text) + StrToFloat(DBEditCartaoCredito.Text) + StrToFloat(DBEditCreditoParcelado.Text) + StrToFloat(DBEditCreditoEmpresa.Text));

uma forma meio "grossa" na minha opniao, mas deve funcionar.



Boa Meu Amigo!!!
Deu certo, muito obrigado!
sei que é uma forma grossa de programar, porem estou iniciando, se você tiver alguma sugestão estou aberto para receber, mesmo assim muito obrigado.
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
natanbh1
Colaborador
Colaborador


Registrado: Terça-Feira, 15 de Março de 2011
Mensagens: 3093
Localização: Belo Horizonte - MG

MensagemEnviada: Ter Out 04, 2016 4:22 pm    Assunto: Responder com Citação

Uma outra maneira de se fazer é trocar StrToFloat por StrToFloatDef.

A diferença entre eles é que com StrToFloatDef você pode estabelecer um valor padrão (no seu caso o zero) em caso de falha na conversão, como estava acontecendo com você.

Ficaria assim:

Código:
procedure TF_FaturamentoPedido.somatotal;
begin
  PanelTotalRecebido.Caption := FloatToStr(StrToFloat(DBEditDinheiro.Text, 0) +
    StrToFloat(DBEditCheque.Text, 0) + StrToFloat(DBEditChequePre.Text, 0) +
    StrToFloat(DBEditCartaoDebito.Text, 0) + StrToFloat(DBEditCartaoCredito.Text, 0) +
    StrToFloat(DBEditCreditoParcelado.Text, 0) + StrToFloat(DBEditCreditoEmpresa.Text, 0));
end;


Assim você poderia usar a procedure SomaTotal no evento OnExit de cada DBEdit, exemplo:

Código:
procedure TF_FaturamentoPedido.DBEditCreditoParceladoExit(Sender: TObject);
begin
  somatotal;
end

_________________
''A persistência é o caminho para o êxito.''
Charlie Chaplin
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular Enviar E-mail
abagattini
Mestre
Mestre


Registrado: Terça-Feira, 29 de Novembro de 2005
Mensagens: 758
Localização: Porto Alegre/RS

MensagemEnviada: Sex Out 07, 2016 5:33 pm    Assunto: Responder com Citação

Uma outra alternativa seria atribuir um valor inicial ao campo na base de dados.
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular Enviar E-mail MSN Messenger
Mostrar os tópicos anteriores:   
Novo Tópico   Responder Mensagem    ActiveDelphi - Índice do Fórum -> Delphi 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