Mudança em dialeto, comando SQL não funicona
Bom Dia Pessoal
A um tempo atras resolvi migrar um banco criado com IBX / Firebird 1.0(dialeto 1) para o Firebird 1.5,
tornando-o em dialeto 3. O problema é que este cód simples q me retornava o valor com desconto dado
(VALORUNITF) no dialeto 3 me devolve o mesmo valor de I.VALOR_BRUTO sem cacular os descontos.
SELECT
I.NUM_PEDIDO,I.QTD_PEDIDO,I.VALOR_BRUTO,I.QTD_NF,
I.descricao1,I.DESCONTO11,I.DESCONTO12,I.DESCONTO13,
I.DESCONTO14,I.DESCONTO15,I.DESCONTO16,
I.VALOR_BRUTO*(1-I.DESCONTO11/100)*
(1-I.DESCONTO12/100)*(1-I.DESCONTO13/100)*
(1-I.DESCONTO14/100)*(1-I.DESCONTO15/100)*
(1-I.DESCONTO16/100) AS VALORUNITNF
FROM
PEDIDOSITENS I
where
I.num_pedido =:num_pedido
Aqui esta o código alguem pode me ajudar, procurei algum problema semelhante mas nunca encontrei e ja faz um tempo que estou com esse problema...
Obrigado
A um tempo atras resolvi migrar um banco criado com IBX / Firebird 1.0(dialeto 1) para o Firebird 1.5,
tornando-o em dialeto 3. O problema é que este cód simples q me retornava o valor com desconto dado
(VALORUNITF) no dialeto 3 me devolve o mesmo valor de I.VALOR_BRUTO sem cacular os descontos.
SELECT
I.NUM_PEDIDO,I.QTD_PEDIDO,I.VALOR_BRUTO,I.QTD_NF,
I.descricao1,I.DESCONTO11,I.DESCONTO12,I.DESCONTO13,
I.DESCONTO14,I.DESCONTO15,I.DESCONTO16,
I.VALOR_BRUTO*(1-I.DESCONTO11/100)*
(1-I.DESCONTO12/100)*(1-I.DESCONTO13/100)*
(1-I.DESCONTO14/100)*(1-I.DESCONTO15/100)*
(1-I.DESCONTO16/100) AS VALORUNITNF
FROM
PEDIDOSITENS I
where
I.num_pedido =:num_pedido
Aqui esta o código alguem pode me ajudar, procurei algum problema semelhante mas nunca encontrei e ja faz um tempo que estou com esse problema...
Obrigado
Neves777
Curtidas 0
Respostas
_rodfaria_
13/09/2005
Tente trocar 100 por 100.0
Tive um problema semelhante no Firebird e assim funcionou.
Rod.
Tive um problema semelhante no Firebird e assim funcionou.
Rod.
GOSTEI 0
Neves777
13/09/2005
Isso ai Rod,
Troquei 100 por 100.0 e deu certo, o numero ficou extenso sem tratamento, mas com o delphi coloco uma mascara. Muito estranhas essas mudanças que ocorrem nas atualizacoes do FIREBIRD, vc conseguiu axar essa solucao no manual do FB?
No mais mto obrigado !
Troquei 100 por 100.0 e deu certo, o numero ficou extenso sem tratamento, mas com o delphi coloco uma mascara. Muito estranhas essas mudanças que ocorrem nas atualizacoes do FIREBIRD, vc conseguiu axar essa solucao no manual do FB?
No mais mto obrigado !
GOSTEI 0
_rodfaria_
13/09/2005
Faça debug do seu código.
Use breakpoints, arquivos de log, watches e demais recursos oferecidos pelo Delphi para inspecionar seu código.
Foi assim que achei o problema de arredondamento.
Rod.
Use breakpoints, arquivos de log, watches e demais recursos oferecidos pelo Delphi para inspecionar seu código.
Foi assim que achei o problema de arredondamento.
Rod.
GOSTEI 0
Afarias
13/09/2005
veja, a questão ai não é a mudança de versão do FB, tanto no FB 1.0 quanto 1.5 o cálculo: I.DESCONTO11/100 sempre será ZERO para todo I.DESCONTO11 < 100
isso é a lógica de cálculos do IB/FB, quando vc divide 2 inteiros a divisão é nos inteiros (mesmo q usar DIV no Delphi) -- isso era assim no IB e continua assim até hoje.
quando vc faz: I.DESCONTO11/100.0 está dizendo pro Fb que a divisão deve ser feita nos REAIS (100 é inteiro, 100.0 é real)
Creio q o ´problema´ ai foi a troca do DIALETO, já q existem diversas alterações de tipo ao se mexer no dialeto do banco.
T+
isso é a lógica de cálculos do IB/FB, quando vc divide 2 inteiros a divisão é nos inteiros (mesmo q usar DIV no Delphi) -- isso era assim no IB e continua assim até hoje.
quando vc faz: I.DESCONTO11/100.0 está dizendo pro Fb que a divisão deve ser feita nos REAIS (100 é inteiro, 100.0 é real)
Creio q o ´problema´ ai foi a troca do DIALETO, já q existem diversas alterações de tipo ao se mexer no dialeto do banco.
T+
GOSTEI 0