crawler 1 Denunciar post Postado Março 12, 2010 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
saulinhoml 0 Denunciar post Postado Março 12, 2010 Tente com outro campo numerico pra ver. t+ Compartilhar este post Link para o post Compartilhar em outros sites
Chrnos 30 Denunciar post Postado Março 12, 2010 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
crawler 1 Denunciar post Postado Março 12, 2010 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
fernando.fxsoft 0 Denunciar post Postado Março 12, 2010 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
itepi 0 Denunciar post Postado Março 13, 2010 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
crawler 1 Denunciar post Postado Março 14, 2010 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
itepi 0 Denunciar post Postado Março 17, 2010 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
crawler 1 Denunciar post Postado Março 17, 2010 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
Pantoja 5 Denunciar post Postado Março 17, 2010 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
itepi 0 Denunciar post Postado Março 18, 2010 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
crawler 1 Denunciar post Postado Março 26, 2010 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
Pantoja 5 Denunciar post Postado Março 26, 2010 poderia coloar seu codigo completo associado ao ONSHOW do form? Compartilhar este post Link para o post Compartilhar em outros sites