GARANTIR DESCONTO

Fórum Duvida com campos Numeric(15,2) #401675

25/05/2011

0

Bom dia pessoal.
Estou procurando uma explicação e até agora não encontrei.
Defini no meu banco de dados campos numeric(15,2) quando fui acessar reparei que os valores estavam com dizima ai me surgiu a duvida, um campo numeric(15,2) não deveria conter 15 digitos antes da virgula e somente 2 no caso um valor de 33,33 e não 33,3300018310547.
Por favor se estiver errado me corrijam como esse campo deve ser usado? Isso é um bug do firebird? porque no sql server não tenho esse problema.
E até onde conheço ele deveria respeitar os 2 campos e fazer o arredondamento caso venha alguma dizima correta?
Agora o que fazer?
Desde ja Obrigado pela ajuda.
Leandro Santos
Leandro Santos

Leandro Santos

Responder

Posts

25/05/2011

Rafael Mattos

como vc ta vendo esse valor, vc ta dando um select ou um SUM alguma coisa?
nunca vi isso trabalho ha 7 anos com o firebird.
posta a imagem da tela.
Responder

Gostei + 0

25/05/2011

Leandro Santos

Segue abaixo a Imagem:

Porém me surgiu um outra duvida agora, o mecanismo de acesso ao banco poderia estar ocasionando este bug? O dialeto do banco poderia estar influenciando nisso tambem?
Responder

Gostei + 0

25/05/2011

Rafael Mattos



pode ser esse RDB$262 que não ta com as casas certa
vc alterou o tipo desse campo? ultimamente?





faz esse update aqui

update RDB$FIELDS set
RDB$FIELD_SCALE = -2,
RDB$FIELD_PRECISION = 15
where RDB$FIELD_NAME = 'RDB$262'

-----------------------------

se não resolver faz o backup restore
Responder

Gostei + 0

25/05/2011

Leandro Santos

Este comando não resolveu o problema, não foi feito nenhum tipo de alteração, esse campo existe desde a criação do banco e um backup e restore não resolve o problema tambem.
Nem se eu criar um campo novo do tipo numeric(15,2) e migrar o valor do campo antigo para o campo novo não resolve.
Responder

Gostei + 0

25/05/2011

Rafael Mattos

tenta com o IBExpert e tenta fazer essa migração que vc falou, dando o update
Responder

Gostei + 0

25/05/2011

Leandro Santos

No IBExpert ele ja trouxe o valor sem a dizima ja veio 34,90 o que pode ser então?
Alguma idéia?
Responder

Gostei + 0

25/05/2011

Rafael Mattos

No IBExpert ele ja trouxe o valor sem a dizima ja veio 34,90 o que pode ser então?
Alguma idéia?


talves seja o SQL Manager, essa é a ultima versão dele? talves ele esteja com problema.
é q sempre usei o IBExpert
Responder

Gostei + 0

25/05/2011

Leandro Santos

Na verdade não é não veja só a imagem abaixo:

No IBExpert aconteceu o mesmo..acredito que estava correto mas não está não.
Responder

Gostei + 0

25/05/2011

Rafael Mattos

altera o DOMAIN desse campo, ali na opção de editar DOMAIN





Responder

Gostei + 0

25/05/2011

Leandro Santos

Nada altera o Domin o tamanho do campo numeric para 9,2 e nada de resolver.
Agora isso pode ser porque é um banco que foi criado no interbase?
Responder

Gostei + 0

25/05/2011

Rafael Mattos

Nada altera o Domin o tamanho do campo numeric para 9,2 e nada de resolver.
Agora isso pode ser porque é um banco que foi criado no interbase?


vc ta usando qual DIALECT?
Responder

Gostei + 0

25/05/2011

Leandro Santos

Uso o Dialect 1
Responder

Gostei + 0

25/05/2011

Rafael Mattos

Uso o Dialect 1


to achando que o problema vai ser isso



DIALETO 1
Usando o dialeto 1, as características de transição se comportam como no Interbase 5:
Constantes alfanuméricas podem ser delimitadas por aspas simples e duplas. O dialeto 1 não reconhece
identificadores delimitados.
O tipo DATE não está disponível, mas é substituído pelo tipo TIMESTAMP, que contém informações sobre
data e hora. Quando um banco de dados versão 5 é gravado/restaurado na versão 6, os campos DATE são
automaticamente atualizados para o tipo TIMESTAMP.
Os tipos DECIMAL e NUMERIC com precisão maior que 9 são gravados como ponto flutuante.

------------
DIALECT 2
Os Clientes podem ser configurados para utilizar o dialeto 2. Nesse modo, eles reportam erros quando
encontram aspas duplas, tipos DATE, ou campos NUMERIC/DECIMAL com precisão maior que 9. Esse
dialeto é utilizado para alertar o desenvolvedor para potenciais problemas durante a migração e não deve ser
utilizado para uso normal no dia a dia. Para detectar áreas problemáticas na definição de um banco de dados
que você está migrando, extraia a METADATA e rode-a através de um cliente utilizando o dialeto 2. Por


exemplo :

isql -i v5metadata.sql
Lembre-se de NÃO utilizar o dialeto 2 para uso normal dos bancos de dados.


----------------------
DIALETO 3
As seguintes características são específicas do DIALETO 3, e são incompatíveis com o dialeto 1 e todos os
BDs e clientes antigos:
Constantes alfanuméricas devem ser delimitadas por aspas simples (apóstrofe). Aspas duplas (") são usadas
somente em identificadores delimitados.
O tipo de dado DATE armazena somente a DATA. Dois novos tipos de dados estão disponíveis : TIME que
armazena somente a informação de HORA, e TIMESTAMP que armazena ambos DATA e HORA. O tipo
TIMESTAMP substitui a funcionalidade do tipo DATE das versões anteriores do IB. O Dialeto 3 também
inclui os operadores funcionais CURRENT_DATE, CURRENT_TIME, e CURRENT_TIMESTAMP.
Tipos DECIMAL e NUMERIC com precisão maior que 9 são gravados utilizando inteiros de 64 bits se
forem criados no dialeto 3. Note que todas os campos desse tipo continuam sendo armazenados como float
se o BD foi trazido de alguma versão anterior do IB.
Responder

Gostei + 0

25/05/2011

Leandro Santos

Bem provavel que seja isso então, agora o estranho é que na hora de criar um campo data como está nas informações que vc passou o IBExpert não disponibiliza a opção timestamp e sim somente date que armazena data e hora sendo que ele reconhe meu banco omo dialect 1.
Responder

Gostei + 0

25/05/2011

Rafael Mattos

Bem provavel que seja isso então, agora o estranho é que na hora de criar um campo data como está nas informações que vc passou o IBExpert não disponibiliza a opção timestamp e sim somente date que armazena data e hora sendo que ele reconhe meu banco omo dialect 1.



vc cria como DATE, mas vc reparo que, quando mostra ali no IBExpert e no SQL Manager ele mostra com o formato timestamp....
Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar