Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
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.
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
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'
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'
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
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.
>
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)
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.
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.
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
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.
poderia coloar seu codigo completo associado ao ONSHOW do form?
Tente com outro campo numerico pra ver. t+