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

Registrado: Sábado, 1 de Outubro de 2016 Mensagens: 18
|
Enviada: Sáb Out 01, 2016 2:57 am Assunto: [RESOLVIDO] Duvidas, soma DBEdit |
|
|
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 |
|
 |
anderbelluno Colaborador


Registrado: Quarta-Feira, 23 de Novembro de 2011 Mensagens: 1030 Localização: Cianorte-PR
|
Enviada: Sáb Out 01, 2016 3:17 am Assunto: |
|
|
simples:
| Código: | if DbEdit.text = '' then
Begin
DbEdit.text:= 0;
end;
|
veja se isso te ajuda. |
|
| Voltar ao Topo |
|
 |
thallesvssouza Novato

Registrado: Sábado, 1 de Outubro de 2016 Mensagens: 18
|
Enviada: Sáb Out 01, 2016 3:23 am Assunto: |
|
|
| 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 |
|
 |
anderbelluno Colaborador


Registrado: Quarta-Feira, 23 de Novembro de 2011 Mensagens: 1030 Localização: Cianorte-PR
|
Enviada: Sáb Out 01, 2016 6:29 am Assunto: |
|
|
| 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 |
|
 |
thallesvssouza Novato

Registrado: Sábado, 1 de Outubro de 2016 Mensagens: 18
|
Enviada: Sáb Out 01, 2016 3:04 pm Assunto: |
|
|
| 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 |
|
 |
natanbh1 Colaborador

Registrado: Terça-Feira, 15 de Março de 2011 Mensagens: 3093 Localização: Belo Horizonte - MG
|
Enviada: Ter Out 04, 2016 4:22 pm Assunto: |
|
|
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 |
|
 |
abagattini Mestre

Registrado: Terça-Feira, 29 de Novembro de 2005 Mensagens: 758 Localização: Porto Alegre/RS
|
Enviada: Sex Out 07, 2016 5:33 pm Assunto: |
|
|
| Uma outra alternativa seria atribuir um valor inicial ao campo na base de dados. |
|
| Voltar ao Topo |
|
 |
|
|
Enviar Mensagens Novas: Proibido. Responder Tópicos Proibido Editar Mensagens: Proibido. Excluir Mensagens: Proibido. Votar em Enquetes: Proibido.
|
|