Problema com campos TFMTDBCField

Delphi

12/03/2005

Boa Tarde colegas.

Ja estou entrando em desespero... :cry:

Tenho uma aplicação que acessa a um banco de dados Interbase, nas tabelas, os campos numericos foram definidos como NUMERIC(13,2), quando gero os TFields no Delphi 7 eles são criados do tipo TFMTDBCField, que pelo que ja consultei nas outras duvidas do forum é o mais indicado para este tipo de campo.

Minha aplicação insere nas tabelas os valores de um arquivo texto, em um primeiro momento (quando não ha registros no arquivo) o processamento é correto, visto que apos todo o processamento eu verifico pelo IBConsole a gravação dos dados no arquivo, entretanto quando é feito nova importação dos dados (no caso de ter sido gerado novo arquivo e os mesmos precisarem ser somados) ocorre o seguinte erro:

Quando, no Banco de dados, encontra-se um campo que tenha um valor com casas decimais, por exemplo 12,03 ele me retorna o seguinte erro ´ ´12=´ is not a valid floating point value ´, pelo que percebi quando o valor possui casas decimais as mesmas não estão sendo encontradas, retornando um valor incoerente. Como fazer para obter o valor correto e trabalhar com este tipo de campo??? :?:

O codigo que estou usando é o seguinte:

Var Valor : Currency;
...
Begin
...
Valor:=StrToFloat(Copy(Linha, 102,13))/100;
...
Tabela.FieldByName(´VALOR´).AsCurrency:=Tabela.FieldByName(´VALOR´).AsCurrency+Valor;

Neste momento se o valor, ja existente no banco, para o campo VALOR contiver casas decimais da o erro. Depurando, quando paro para ver o valor do campo ele não me informa, diz que o valor é desconhecido.

Obs.: Tabela é um ClientDataSet que aponta para um componente DBExpress ligado a tabela do Banco.

Desde ja agradeço a toda ajuda.


Arc@njo

Arc@njo

Curtidas 0

Respostas

Rômulo Barros

Rômulo Barros

12/03/2005

Caro amigo. Este fato já aconteceu comigo no interbase 5.0 e 6.0. Eu realizava algo como:

SELECT SUM(CAMPO) FROM TABELA;


Vamos supor que o retorno do SELECT teria que ser 300. Então, ao invés de me retorna 300, o que vinha como resposta era [b:643618d5c7]30=[/b:643618d5c7], ou seja, o SGBD substituia o último zero (0) do resultado da pesquisa pelo sinal de [b:643618d5c7]igual (=)[/b:643618d5c7].

Até hoje não sei o motivo disto ( resolvi trabalhar com o oracle ), mas eu me lembro muito bem como foi que resolvi: Abandonei a Query que executava o SELECT e substitui por uma [b:643618d5c7]Stored Procedure[/b:643618d5c7]. Faça o mesmo. Tenho certeza de que a Stored Procedure irá trazes o resultado correto.


GOSTEI 0
Arc@njo

Arc@njo

12/03/2005

Valeu gente. :lol:

Consegui resolver da seguinte forma:

No select do componente SQLDataSet mudei a intrução de:

Select VALOR From Tabela Where <condição>

para

Select (VALOR CAST FLOAT) VALOR From Tabela Where <Condição>

Assim resolveu o problema, pois os valores dos campos TField vieram com Float e não mais como BCD. O problema de aparecer muitas casas decimais pode facilmente ser corrigido com mascara nos proprios TFields, e como o campo no banco é Numeric(13,2) não ira armazenar mais que duas casas decimais.

Sendo assim agradeço a todos.

Valeu.


GOSTEI 0
POSTAR