is not a valid floating point value urgente

07/09/2004

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

Respostas

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 Citar

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 Citar

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 Citar

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 Citar

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 Citar

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 Citar

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 Citar

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 Citar