is not a valid floating point value urgente

07/09/2004

0

Bom dia.
Instalei minha aplicação no cliente ontem, quase fiquei louco de ver tantos erros (is not a valid floating point value urgente) na minha frente,
preciso resolver isto hoje, gostaria muito de receber ajuda dos internautas do forum.

Utilizo o componente dbexpress, delphi7 faribird 1.5, o cliente tem 10 máquinas com sistema operacional windows 98.
Minha tabela esta definida com campos de valor monetário com 2 ou tres casas decimais ex (prod_vravista numeric(12,2)) ou (prod_vrunitsario numeric (12,3) ou no pedido (ped_vrtotal numeric (12,2)) este campo é calculado e atualizado numa procedure.
Recebo tambem mensagem de acsess violation, será que é porque utilizo qury dinamica para fazer pesquisa?


´O perdão aos outros abre a porta para sermos perdoados´

Placido um abraço a todos


Placido

Placido

Responder

Posts

07/09/2004

Ronaldo.cutu

bom dia

a conversão de string para float dependendo do ponto decimal que estiver
em uso vai dar esse erro de is not a valid floating point value
exemplo:

o ponto decimal = ´,´ (virgula)
se vc para uma conversão de uma string de 1.000,00 para float -erro
se vc para uma conversão de uma string de 1000,00 para float -ok

o ponto decimal = ´.´ (ponto)
se vc para uma conversão de uma string de 1.000,00 para float -erro
se vc para uma conversão de uma string de 1000,00 para float -erro

voce pode altera-lo da seguinte forma
DecimalSeparator := ´.´; ou
DecimalSeparator := ´,´;

qualquer duvida estou a disposição

Ronaldo


Responder

07/09/2004

Placido

Ronaldo obrigado pela dica, mas faço outra pergunta no meu escritório o sistema operacinal é o xp, me falaram em outro portal que este erro da sistema operacional windows 98 que é o caso do meu cliente, isto tem alguma coisa a ver?
Grato


Responder

08/09/2004

Ronaldo.cutu

ate onde eu sei não a respeito do 1º erro, no 2º erro vc tem que ver onde está acontecendo o erro

Ronaldo


Responder

09/09/2004

Placido

Uma observação, fui no cliente hoje de manhã, o cliente tem 12 máquinas
sistema operacional windows 98, apenas 2 máquinas da este tipo de erro,
já conferi no painel de controle configuração regional todas as máquinas estão com a mesma configuração.
Grato

Plácido :roll:


Responder

09/09/2004

Ronaldo.cutu

como eu te disse até onde eu sei o erro é de conversao, o erro acontece até mesmo no winxp, eu utilizo o winxp com o delphi e tenho outra maquina win98 que meu sistema funciona normalmente, fiz até um teste
antes de te enviar aquela dica

faça um programa para teste e confirme

pode até ser pau de win98 porque so ta acontecendo em 2 maquina voce confiriu a versão do win98 dessa duas maquinas se é igual a outras ou tentar reinstalar o win98, qualquer coisa me mande o script de onde está ocorrendo o erro eu dou analisada

até +

Ronaldo
ronaldo@knr.com.br


Responder

10/09/2004

Placido

Ronaldo obrigado pela atenção segue abaixo meu script conforme sua solicitação


Segue abaixo minhas linhas de comanso como voce pediu nos eventos after e befor post.
Lebrando que este erro ocorre quando o cliente aciona a tecla enter no ultimo campo da grig(valor unitario).
Na tebela peditens tem uma Trigger que faz alguns calculos, desativei a trigger para teste e o problema persiste então o
problema não está na trigger.

============

procedure TFrmMovOrcamento.cdsMestreAfterScroll(DataSet: TDataSet);
begin
inherited;
edtValor.Text := FloatToStr(cdsMestreORC_VRTOTAL.AsFloat);
end;

procedure TFrmMovOrcamento.cdsDetalheAfterPost(DataSet: TDataSet);
Var
vOperacao : Integer;
TD : TTransactionDesc;
begin
inherited;
with TSqlQuery.Create(nil) do
begin
try
SQLConnection := FrmPrincipalSGCAdm.SQLConnection1; {: componente de conexão}
Sql.Add(´SELECT ORC_VRTOTAL FROM ORCAMENTO´);
Sql.Add(´ WHERE EMP_CODIGO =´ +IntToStr(FrmPrincipalSGCAdm.CodEmpresa));
Sql.Add(´ AND ORC_NUMEROOPERACAO =´+IntToStr(cdsMestreORC_NUMEROOPERACAO.AsInteger));
Open;
edtValor.Text := FormatFloat(´#,,0.00´,(Fields[0].AsFloat));
finally
Free;
end;
end;

if (edtValor.Text ´´) then
begin
If not(FrmPrincipalSGCAdm.SQLConnection1.InTransaction) then
begin
Td.TransactionID := 1;
TD.IsolationLevel := xilREADCOMMITTED;
FrmPrincipalSGCAdm.SQLConnection1.StartTransaction(TD);
try
stpDesconto.ParamByName(´PEMPRESA´).AsInteger := FrmPrincipalSGCAdm.CodEmpresa;
stpDesconto.ParamByName(´POPERACAO´).AsInteger := StrToInt(dbCodigo.Text);
stpDesconto.ParamByName(´PVRDESCONTO´).AsFloat := StrToFloat(dbVrDesconto.Text);
stpDesconto.ExecProc;
FrmPrincipalSGCAdm.SQLConnection1.Commit(TD);
except
FrmPrincipalSGCAdm.SQLConnection1.Rollback(TD);
raise
end;
end;
If (edtConsulta.text ´´) then
begin
dbCodigo.Visible := True;
cdsMestre.Close;
sdsMestre.Close;
sdsMestre.ParamByName(´EMP_CODIGO´).AsInteger := FrmPrincipalSGCAdm.CodEmpresa;
sdsMestre.ParamByName(´ORC_NUMEROOPERACAO´).AsInteger := StrToInt(edtConsulta.text);
sdsMestre.Open;
cdsMestre.Open;
HabilitaBotao(ExcluirBTN);
end;
gdItensOrcamento.SetFocus;
end;
end;


================= BeforePost =========

procedure TFrmMovOrcamento.cdsDetalheBeforePost(DataSet: TDataSet);
begin
inherited;
ArredondaCampo(cdsDetalheORD_QTDE,2);
If cdsDetalheORD_PERCENTUALDESCONTO.Text = ´´ then
cdsDetalheORD_PERCENTUALDESCONTO.text := ´0´;
if (cdsDetalhePROD_CODIGO.IsNull) then
sdsDetalhe.Cancel;
cdsDetalheEMP_CODIGO.Value := cdsMestreEMP_CODIGO.Value;
cdsDetalheORC_NUMEROOPERACAO.Value := cdsMestreORC_NUMEROOPERACAO.Value;

if (dsDetalhe.DataSet.State in [dsInsert, dsEdit])then
begin
stpSeqItens.ParamByName(´PEMPRESA´).AsInteger := FrmPrincipalSGCAdm.CodEmpresa;
stpSeqItens.ParamByName(´POPERACAO´).AsInteger := cdsMestreORC_NUMEROOPERACAO.AsInteger;
stpSeqItens.ExecProc;
cdsDetalheORD_SEQUENCIA.AsInteger := stpSeqItens.Params[2].AsInteger;
end

end;



========
Obrigado pela atenção um abraço.
Plácido


Responder

10/09/2004

Placido

Resolvi o problema, na minha tela de digitação de pedido tem um campo
desconto em valor do pedido, campo este que não é obritatório e eu estava utulizando a função de conversão sem verificar se o conteúdo
estava preenchido ou não como no exemplo.
stpDesconto.ParamByName(´PVRDESCONTO´).AsFloat := StrToFloat(dbVrDesconto.Text);

Coloquei uma condição e problema foi resolvido.

Um abraço.


Responder

11/09/2004

Dopi

Só pra complementar....

No Delphi 6 foi introduzida uma nova versão do StrToFloat..

StrToFloatDef( StrFloat, ValorDefault) ;

Se nao for possivel converter o StrFloat , o ValorDefault será assumido. Ex:
StrToFloatDef( StrFloat, 0 ) ;

é pratico pois evita blocos Try e Exceçoes em run-time...


Responder

19/02/2019

Danilo Oliveira

bom dia

a conversão de string para float dependendo do ponto decimal que estiver
em uso vai dar esse erro de is not a valid floating point value
exemplo:

o ponto decimal = ´,´ (virgula)
se vc para uma conversão de uma string de 1.000,00 para float -erro
se vc para uma conversão de uma string de 1000,00 para float -ok

o ponto decimal = ´.´ (ponto)
se vc para uma conversão de uma string de 1.000,00 para float -erro
se vc para uma conversão de uma string de 1000,00 para float -erro

voce pode altera-lo da seguinte forma
DecimalSeparator := ´.´; ou
DecimalSeparator := ´,´;

qualquer duvida estou a disposição

Ronaldo




Obrigado pela resposta me ajudou a corrigir um problema.
Responder

Que tal ter acesso a um e-book gratuito que vai te ajudar muito nesse momento decisivo?

Ver ebook

Recomendado pra quem ainda não iniciou o estudos.

Eu quero
Ver ebook

Recomendado para quem está passando por dificuldades nessa etapa inicial

Eu quero

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar