Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

crawler

[Resolvido] Delphi não pega valor zerado corretamente.

Recommended Posts

Bom dia.

 

Quando faço select numa tabela quando o valor do campo=0,00 o Delphi me retorna esse valor alfanumerico '-7,105427357601E-15'

 

Ex:

Tabela clientes o campo SALDOCLIENTE esta valendo 0,00 . Era para mostrar no form R$ 0,00,mas ele me retorna '-7,105427357601E-15'

verifique no DEBUG que esse valor vem do Dataset.

 

dmdados.QVerificaValorSaldo.Close;
dmdados.QVerificaValorSaldo.SQL.Clear;
dmdados.QVerificaValorSaldo.SQL.Add('SELECT SALDOCLIENTE FROM CLIENTES where IDCLIENTE='+inttostr(uCodCliente.codigo));
dmdados.QVerificaValorSaldo.Open;
DBText2.Caption := dmdados.QVerificaValorSaldoSALDOCLIENTE.AsString;

 

Gostaria de saber como controlar esse tipo de situação.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Qual o BD que usa? Tem certeza que o valor lido do BD é zero e não nulo? As vezes, por pegar campos nulos, a aplicação pode se perder por tentar converter um valor inexistente para string....

 

[]'s

Compartilhar este post


Link para o post
Compartilhar em outros sites

Acontece apenas com esse campo. eu uso o firebird e para conexão os componentes da palheta Interbase.

 

O tipo do campo no banco é "Double precision" e no delphi é "double".

 

O valor quando esta no banco é 0,00 mas quando passa para o dataset fica '-7,105427357601E-15'

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tente mudar seu select para o seguinte:

 

SELECT COALESCE(SALDOCLIENTE, 0) FROM CLIENTES where IDCLIENTE='+inttostr(uCodCliente.codigo)

 

Um abraço,

 

 

Acontece apenas com esse campo. eu uso o firebird e para conexão os componentes da palheta Interbase.

 

O tipo do campo no banco é "Double precision" e no delphi é "double".

 

O valor quando esta no banco é 0,00 mas quando passa para o dataset fica '-7,105427357601E-15'

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tente o seguinte código :

 

with dmdados.QVerificaValorSaldo do
begin
  Close;
  SQL.Clear;
  SQL.Add('SELECT SALDOCLIENTE FROM CLIENTES where IDCLIENTE = :ID');
  ParamByName('ID').Valeu := uCodCliente.codigo;
  Open;
end;

DBText2.Caption := FormatFloat('#,##0.00',dmdados.QVerificaValorSaldoSALDOCLIENTE.AsDouble);

Abraço

Compartilhar este post


Link para o post
Compartilhar em outros sites

Agora com a dica do itepi esta aparecendo 0,00 no lugar daqueles caracteres estranhos.

 

Percebi no debug que até a linha onde formata o valor do campo na recordset continua com aqueles caracteres.

 

Ou seja depois que formata o valor para a ser 0,00 a valor continua sendo '-7,105427357601E-15' e continuo sem saber porque isso acontece.

 

Mas de qualquer forma obrigado porque agora esta certo.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Agora com a dica do itepi esta aparecendo 0,00 no lugar daqueles caracteres estranhos.

 

Percebi no debug que até a linha onde formata o valor do campo na recordset continua com aqueles caracteres.

 

Ou seja depois que formata o valor para a ser 0,00 a valor continua sendo '-7,105427357601E-15' e continuo sem saber porque isso acontece.

 

Mas de qualquer forma obrigado porque agora esta certo.

 

Tente alterar no bando de dados de DOUBLE para DECIMAL(18,2)

Compartilhar este post


Link para o post
Compartilhar em outros sites

Fiz o que você me falou. Ai na hora de adicionar o campo ao Dataset e rodar o programa da a seguinte mensagem de erro:

 

"Project precibo.exe raised exception class EDatabaseError with message 'QVerificaValorSaldo: Type mismatch for field

'SALDOCLIENTE', expecting:FLOAT actual: BCD'. Process stopped. Use Step or Run to continue"

 

Não entendi esse lance de tipo BCD.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Se deu essa mensagem é pq os campos ficaram incompatíveis.

 

HUmmm deixe-me pensar...

 

 

tem certeza que o valor 0,00 já foi adicionado na tabela? Pq se mostrar o que está lá antes de receber o valor pode ser que fique daquele jeito mesmo.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Você precisa excluir os campos do DataSet e clicar em "Add Field All" ou algo assim, nao me lembro de cabeça, estou sem o delphi aqui...

 

 

Para isso clique duas vezes no DataSet, uma tela com uma lista aparecerá, exclua todos os Fields que tiver na lista, em seguida clique com o botão direito sobre a lista e seleciona "Add Fields All"

 

E tente rodar a aplicação novamente

Compartilhar este post


Link para o post
Compartilhar em outros sites

Desculpe pessoal, preciso reativar este tópico pois não estou consiguindo nem entender o que está acontecendo.

 

Eu alterei o tipo do campo de float para decimal(18,2) e já tentei de diversas maneiras possíveis fazer rodar o programa,

mas não tem jeito não, dá aquela mansagem de erro na hora em que abre a tabela no evento onShow do form trabalhado.

 

Estou utilizando o componente table da palheta interbase, pode ser que seja o dialeto ou algum outro detalhe, é uma situação horrivel, pois do jeito que esta o valor do campo nunca fica zero, inves disso fica aqueles caracteres estranhos. O tipo de campo no dataset é TFloatField e se eu altero o tipo de campo na tabela ele espera o tipo TIBFloatField.

 

Não sei o que esta acontecendo, nem tenho informações na web sobre isso, por isso peço ajuda.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.