Fórum Problema com is not a valid floating point value #454649
10/09/2013
0
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
Curtir tópico
+ 0Posts
10/09/2013
Marcos Oliveira
Só pra deixar mais claro, esse "Map" que você está usando o que é? Classes, componentes, etc?
Qual banco você usa?
Att,
Marcos
Gostei + 0
10/09/2013
Marlon Minotti
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
10/09/2013
Marcos Oliveira
Att,
Marcos
Gostei + 0
10/09/2013
Marlon Minotti
Gostei + 0
10/09/2013
Marcos Oliveira
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
10/09/2013
Marlon Minotti
Gostei + 0
10/09/2013
Marcos Oliveira
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
10/09/2013
Marlon Minotti
Gostei + 0
10/09/2013
Marcos Oliveira
Gostei + 0
10/09/2013
Marlon Minotti
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
10/09/2013
Marcos Oliveira
Att,
Marcos
Gostei + 0
10/09/2013
Marlon Minotti
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
10/09/2013
Marcos Oliveira
Gostei + 0
10/09/2013
José
Caso necessário basta pedir para reabrir este tópico ou fique a vontade para criar um novo tópico.
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)