Problema com is not a valid floating point value
Bom dia pessoal, sou novo aqui no fórum e estou com um problema que está me caindo os cabelos... Estou usando esse código:
Dai é o seguinte, quando vou salvar os dados na venda ele da o erro do titulo. E eu ja nao sei mais o que fazer... Dicas por favor!
Att.
for I := 0 to map.Count - 1 do
begin
if FieldByName(map[I]).DataType = ftFloat then
begin
FieldByName(map[I]).AsFloat := StrToFloat(StringReplace(valorDoComponente(map.Objects[I], FieldByName(map[I]).DataType), '.', '', [rfReplaceAll, rfIgnoreCase]));
end
else
begin
FieldByName(map[I]).Value := valorDoComponente(map.Objects[I], FieldByName(map[I]).DataType);
end;
end;
Dai é o seguinte, quando vou salvar os dados na venda ele da o erro do titulo. E eu ja nao sei mais o que fazer... Dicas por favor!
Att.
Marlon Minotti
Curtidas 0
Respostas
Marcos Oliveira
10/09/2013
Bom dia Minotti.
Só pra deixar mais claro, esse "Map" que você está usando o que é? Classes, componentes, etc?
Qual banco você usa?
Att,
Marcos
Só pra deixar mais claro, esse "Map" que você está usando o que é? Classes, componentes, etc?
Qual banco você usa?
Att,
Marcos
GOSTEI 0
Marlon Minotti
10/09/2013
O map é um mapeamento que fiz em um form para que ele pegue todos os edits, combobox, labelededit e afins...
Estou usando postgresql
Se ainda tiver duvidas sobre o map eu coloco os códigos de como ele esta funcionando aqui pra voce ver.
Estou usando postgresql
Se ainda tiver duvidas sobre o map eu coloco os códigos de como ele esta funcionando aqui pra voce ver.
GOSTEI 0
Marcos Oliveira
10/09/2013
Minotti, teria como você postar o erro, exatamente como ele aparece?
Att,
Marcos
Att,
Marcos
GOSTEI 0
Marlon Minotti
10/09/2013
Project Easy Solutions.exe raised exception class EConvertError with message "1.123,12" is not a valid floating point value.
GOSTEI 0
Marcos Oliveira
10/09/2013
Minotti, o problema pode estar no separador de milhar do valor "1.123,12".
Quando vou gravar no PostgresSQL, eu formato o valor para "1123.12".
Já tive problemas ao gravar o ponto decimal como vírgula. E pra resolver, formatei toda minha gravação, retirando o separador de milhar, e trocando o separador de decimal de vírgula para ponto.
Att,
Marcos
Quando vou gravar no PostgresSQL, eu formato o valor para "1123.12".
Já tive problemas ao gravar o ponto decimal como vírgula. E pra resolver, formatei toda minha gravação, retirando o separador de milhar, e trocando o separador de decimal de vírgula para ponto.
Att,
Marcos
GOSTEI 0
Marlon Minotti
10/09/2013
Mas eu nao tenho problemas com a virgula no decimal, eu tenho problemas com o ponto na casa de milhares... Perceba que eu usei StringReplace para ver se eu conseguia resolver esse problema mas mesmo assim é pertinente. Voce recomendaria eu usar um FormatFloat?
GOSTEI 0
Marcos Oliveira
10/09/2013
Pela mensagem de erro que você passou, o seu ponto de milhar continua presente no valor. Verifique se sua rotina para trocar o ponto por vazio está funcionando.
Ou então o erro pode estar em outro ponto do seu projeto, como no "else", por exemplo. A melhor forma de saber é depurando. Você sabe me dizer se o erro está na linha onde você colocou o StringReplace?
Ou então o erro pode estar em outro ponto do seu projeto, como no "else", por exemplo. A melhor forma de saber é depurando. Você sabe me dizer se o erro está na linha onde você colocou o StringReplace?
GOSTEI 0
Marlon Minotti
10/09/2013
Sim, quando ele da o erro, ele me aponta para a linha do StringReplace
GOSTEI 0
Marcos Oliveira
10/09/2013
A sua função "valorDoComponente" faz o quê? Já verificou se o problema não é nela?
GOSTEI 0
Marlon Minotti
10/09/2013
O valorDoComponente identifica qual o tipo de componente que eu estou "pegando" olhe o código:
function TfrmPadraoCadastro.valorDoComponente(obj: TObject;
tipoDado: TFieldType): Variant;
var
aux: String;
begin
if (obj is TCustomEdit) then
begin
aux := TCustomEdit(obj).Text;
end
else if (obj is TCustomComboBox) then
begin
aux := TComboBox(obj).Text;
end;
case tipoDado of ftString, ftWideString: result := aux;
ftSmallint, ftInteger, ftWord, ftLargeint: result := StrToInt(aux);
ftFloat, ftCurrency: result := StrToFloat(aux);
ftDate, ftTime, ftDateTime: result := StrToDateTime(aux);
end;
end;
GOSTEI 0
Marcos Oliveira
10/09/2013
Você já colocou um break-point nessa sua função pra ver se o problema não está nela?
Att,
Marcos
Att,
Marcos
GOSTEI 0
Marlon Minotti
10/09/2013
Muito obrigado pela atenção Marcos, voce foi muito atencioso.
Eu e um amigo de serviço aqui analisamos e vimos que a ideia estava correta, porém o lugar estava errado... eu tive que colocar o StringReplace dentro da função valorDoComponente quando ele fosse float, repare:
Muito obrigado pela atenção...
Eu e um amigo de serviço aqui analisamos e vimos que a ideia estava correta, porém o lugar estava errado... eu tive que colocar o StringReplace dentro da função valorDoComponente quando ele fosse float, repare:
function TfrmPadraoCadastro.valorDoComponente(obj: TObject;
tipoDado: TFieldType): Variant;
var
aux: String;
begin
if (obj is TCustomEdit) then
begin
aux := TCustomEdit(obj).Text;
end
else if (obj is TCustomComboBox) then
begin
aux := TComboBox(obj).Text;
end;
case tipoDado of ftString, ftWideString: result := aux;
ftSmallint, ftInteger, ftWord, ftLargeint: result := StrToInt(aux);
ftFloat, ftCurrency: result := StrToFloat(StringReplace(aux, '.', '', [rfReplaceAll, rfIgnoreCase]));
ftDate, ftTime, ftDateTime: result := StrToDateTime(aux);
end;
end;
Muito obrigado pela atenção...
GOSTEI 0
Marcos Oliveira
10/09/2013
Por nada! Estou aqui pra ajudar! Abraço.
GOSTEI 0
José
10/09/2013
Tendo entendido que a duvida foi sanada, estou finalizando o tópico.
Caso necessário basta pedir para reabrir ou criar um novo tópico.
Caso necessário basta pedir para reabrir ou criar um novo tópico.
GOSTEI 0
José
10/09/2013
Tendo entendido que a duvida foi sanada, estou finalizando o tópico.
Caso necessário basta pedir para reabrir este tópico ou fique a vontade para criar um novo tópico.
Caso necessário basta pedir para reabrir este tópico ou fique a vontade para criar um novo tópico.
GOSTEI 0