Fórum Estouro de Capacidade no Firebird 2.5 #560194
11/08/2016
0
select cr.DATA_PGTO,cr.NUM_PEDIDO,cr.CLIENTE,cr.VALOR_PAGO,
cr.CUSTOPARCELA,cr.QTDE_PARC,cr.NUM_PARC,
cast(cr.VALOR_PAGO as double precision)- cast(cr.CUSTOPARCELA as double precision) lucro
from conta_receber cr
where cr.DATA_PGTO BETWEEN :p_inicio AND :p_fim order by cr.num_pedido
em alguns registros os campos "VALOR_PAGO" e "CUSTOPARCELA" estão com seus valores zerados,
porem no retorno ao invés de me retornar zero("VALOR_PAGO" - "CUSTOPARCELA"=0 ) me retorna um número gigante 92.233.720.368.547.760,000
acrescentando a linha um cast a linha:
cast(cast(cr.VALOR_PAGO as double precision)- cast(cr.CUSTOPARCELA as double precision)as decimal(12,2)) lucro
o resultado obtido é zero "cast(cast(cr.VALOR_PAGO as double precision)- cast(cr.CUSTOPARCELA as double precision)as decimal(12,2)) lucro"=0
porem ao executar esse sql do delphi da um erro de estouro de capacidade alguem sabe como resolver? Esse dois campos são decimal 12,2
Ederson Rodrigues
Curtir tópico
+ 0Post mais votado
12/08/2016
select cr.DATA_PGTO,cr.NUM_PEDIDO,cr.CLIENTE,cr.VALOR_PAGO,
cr.CUSTOPARCELA,cr.QTDE_PARC,cr.NUM_PARC,
(case when cr.VALOR_PAGO is null then 0 else cr.VALOR_PAGO end)-(case when cr.CUSTOPARCELA is null then 0 else cr.CUSTOPARCELA end) as LUCRO
from conta_receber cr
where cr.DATA_PGTO BETWEEN :p_inicio AND :p_fim order by cr.num_pedido
Att.
Anderson.
Anderson
Gostei + 1
Mais Posts
12/08/2016
Jones Granatyr
Select
Coalesce(valor_pago, 0)
from
Tabela
Se o valor_pago for nulo, é retornado zero
Gostei + 0
12/08/2016
Ederson Rodrigues
Eu já havia verificado esses campos estão preenchidos com numero "0" dentro do banco
com o coalesce me retorna aquele número "9,22337203685478E16" e por não usar o cast
da erro até no ibexpert
Gostei + 0
12/08/2016
Eduardo Silva.
Se esses campos já são do tipo numéricos não faz sentido você utilizar o cast para converter novamente.
Eduardo Belo
Gostei + 0
12/08/2016
Ederson Rodrigues
Se esses campos já são do tipo numéricos não faz sentido você utilizar o cast para converter novamente.
Eduardo Belo
Estou usando decimal(12,2) para os dois, porém só usando o cast eu consegui fazer retornar "0",mas dessa forma da estouro de capacidade ao executar o client data set
Gostei + 0
12/08/2016
Ederson Rodrigues
select cr.DATA_PGTO,cr.NUM_PEDIDO,cr.CLIENTE,cr.VALOR_PAGO,
cr.CUSTOPARCELA,cr.QTDE_PARC,cr.NUM_PARC,
(case when cr.VALOR_PAGO is null then 0 else cr.VALOR_PAGO end)-(case when cr.CUSTOPARCELA is null then 0 else cr.CUSTOPARCELA end) as LUCRO
from conta_receber cr
where cr.DATA_PGTO BETWEEN :p_inicio AND :p_fim order by cr.num_pedido
Att.
Anderson.
Anderson também não foi, o campo não está nulo está preenchido com o número "0" , a unica forma que roda no sql é usando cast já estou conformado com isso rs...agora o problema é que no dephi 7 ele da erro de estouro de capacidade
Gostei + 0
12/08/2016
Anderson
select cr.DATA_PGTO,cr.NUM_PEDIDO,cr.CLIENTE,cr.VALOR_PAGO,
cr.CUSTOPARCELA,cr.QTDE_PARC,cr.NUM_PARC,
(case when cr.VALOR_PAGO is 0 then 0 else (cr.VALOR_PAGO-cr.CUSTOPARCELA) end) as LUCRO
from conta_receber cr
where cr.DATA_PGTO BETWEEN :p_inicio AND :p_fim order by cr.num_pedido
Att.
Anderson.
Gostei + 0
12/08/2016
Ederson Rodrigues
para no final do relatório ter o lucro mesmo....
cara isso é coisa de doido o firebird aceita 0-1 por exemplo, mas não aceita 0-cr.CUSTOPARCELA
Gostei + 0
12/08/2016
Anderson
select cr.DATA_PGTO,cr.NUM_PEDIDO,cr.CLIENTE,cr.VALOR_PAGO,
cr.CUSTOPARCELA,cr.QTDE_PARC,cr.NUM_PARC,
(case when cr.VALOR_PAGO is 0 then (cr.CUSTOPARCELA*-1) else (cr.VALOR_PAGO-cr.CUSTOPARCELA) end) as LUCRO
from conta_receber cr
where cr.DATA_PGTO BETWEEN :p_inicio AND :p_fim order by cr.num_pedido
Se possível, testa o código em uma ferramenta SQL (ex.: flamerobin, ibexpert) para visualizar os dados e ver se tudo ok (e só depois ir codificar no Delphi).
Att.
Anderson.
Gostei + 0
13/08/2016
Eduardo Silva.
O Delphi 7 foi originalmente lançado em 2002 e não tem drive nativo para o Firebird.
O que se utiliza é o drive do Interbase mas não é 100% compatível, principalmente se você está utilizando a versão 2.5 do Firebird que foi lançado em 2010.
Se você está utilizando o DBEXpress aconselho a utilizar um drive ou um componente de terceiros. Outra alternativa é uma versão mais recente do Delphi.
O drive nativo do Firebird foi lançado a partir do Delphi 2010.
Eduardo Belo
Gostei + 0
15/08/2016
Ederson Rodrigues
Com as dicas do Anderson, e executando no ibexpert pude notar que o valor do custo estava vindo como zero, por um erro da minha aplicação na hora de gravar, preenchi manualmente o valor no banco e todos os selects postados aqui funcionaram.
E como o Eduardo disse acima acredito que seja algo de incompatibilidade mesmo ou erro no firebird 2.5 pois como eu citei ele aceita "0-0" mas não aceita " 0-cr.CUSTOPARCELA" se o valor do custo for zero, alias qualquer operação como a sugerida pelo nosso amigo Anderson (cr.CUSTOPARCELA*-1)...
Para que isso funcione somente usando cast e ai caímos no problema do estouro de capacidade do Delphi....
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)