[firebase-br] Bug grave no Firebird

Otto ottofuch em terra.com.br
Ter Jul 12 17:54:20 -03 2005


Nos arquivos xBase (.DBF) os valores numéricos são armazenados como strings
de caracteres e convertidos para os valores após a leitura no arquivo de
dados .DBF.
No Paradox não sei, pois a Borland nunca abriu dados sobre o Paradox. Mas
permite, além de currency, o BCD

Em
http://www.uniube.br/uniube/cursos/graduacao/tpd/Disciplinas/jr/minicurso/ParadoxSQL.html#topico2
temos:
"BCD (Binary Coded Decimal - # ) : Este tipo de campo é usado para realizar
cálculos numéricos com uma precisão maior do que aquela efetuada com os
demais tipos númericos. A principal utilidade deste tipo de campo consiste
em fornecer compatibilidade com outras aplicações que usam dados deste tipo,
pois no caso da utilização de tabelas Paradox num aplicativo, só serão
permitidos números com um máximo de 15 algarismos significativos. "

O BCD é muito usado no COBOL (COmmon Business Orientated Language), e pelo
que me lembro, num byte, usa ós dois nibles do byte. Um byte, de 8 bits,
compõe-se de dois nibles  22221111 onde 1111 é o nible à direita, e 2222 é o
nible à esquerda. Com um nible pode-se representar númeos de 0 a 15. Mas em
cada nible, apenas os númeos de 0 a 9 são aproveitados para representar os
respectivos numeros decimais. Consegue-se armazenar dois dígitos decimais
nun byte.

Tanto o Delphi 6 quanto o C++ Builder 5 (foi os que eu olhei) tem classes de
suporte à representação BCD. Mas como também existe o tipo currency, não há
necessidade, embora o currency sempre opera com quatro casas decimais após a
vírgula (ponto para os americanos).

No caso do Firebird (e Access e outros mais) o negócio é entregar os números
já na conformação certa ao Firebird. Quantos aos dados calculados
internamente ...
100+
Otto







----- Original Message ----- 
From: "PHA (TeamFB)" <lista em pha.com.br>
To: "FireBase" <lista em firebase.com.br>
Sent: Tuesday, July 12, 2005 10:54 AM
Subject: Re: [firebase-br] Bug grave no Firebird


> Concordo com o Sydnei, o limite deveria ser respeitado.
>
> Eles mudaram isso, so nao me lembro em qual versão, antigamente o Numeric
era respeitado e o Decimal nao.
>
> NUMERIC datatype
>
> NUMERIC(x,y)
> In the syntax above, InterBase stores exactly x digits. Of that number,
exactly y digits are
> to the right of the decimal point. For example,
>
> NUMERIC(5,2)
> declares that a column of this type always holds numbers with exactly 5
digits, with
> exactly two digits to the right of the decimal point: ppp.ss.
>
> DECIMAL datatype
>
> DECIMAL(x,y)
> In the syntax above, InterBase stores at least x digits. Of that number,
exactly y digits are
> to the right of the decimal point. For example,
>
> DECIMAL(5,2)
> declares that a column of this type must be capable of holding at least
five but possibly
> more digits and exactly two digits to the right of the decimal point:
ppp.ss.
>
> PHA
> Nova Odessa / SP - Brazil
> Membro do TeamFB (FireBase)
>
> -----Mensagem original-----
> From: "Sidnei" sidnei em amcom.com.br
> Date: Tue, 12 Jul 2005 12:12:44 -0300
> To: "Carlos H. Cantu" listas em warmboot.com.br
> Subject: Re: [firebase-br] Bug grave no Firebird
>
> > Resumindo, o NUMERIC(12,4) nao serve pra nada de controle do
Firebird....
> >
> >
> > ----- Original Message ----- 
> > From: "Carlos H. Cantu (TeamFB)" <listas em warmboot.com.br>
> > To: "FireBase" <lista em firebase.com.br>
> > Sent: Tuesday, July 12, 2005 11:09 AM
> > Subject: Re: [firebase-br] Bug grave no Firebird
> >
> >
> > > No dialeto 3, um campo numeric (12,4) é armazenado internamente como
> > > um inteiro de 64bits, que permite valores entre:
> > >
> > > -9.223.372.036.854.775.808 e 9.223.372.036.854.775.807
> > >
> > > No seu caso, como vc determinou 4 casas decimais, irá conseguir
> > > armazenar valores etre:
> > >
> > > -922.337.203.685.477,5808 e 922.337.203.685.477,5807
> > >
> > > []s
> > > Cantu (Membro do TeamFB - FireBase)
> > > http://www.warmboot.com.br
> > > FireBase - http://www.FireBase.com.br
> > >
> > > S> Estou usando o Firebird versão 1.5.2.4731, e aconteceu um
> > > S> problema onde me assustei muito. Vou passar o problema abaixo
> > > S> atravez de script:
> > >
> > > S> CREATE TABLE TESTE(VAL1 NUMERIC(12,4));
> > > S> COMMIT;
> > >
> > > S> INSERT INTO TESTE
> > > S> (VAL1)
> > > S> VALUES
> > > S> (1234567890123);
> > > S> COMMIT;
> > >
> > > S> Notem que criei um campo com capacidade de 12 e o firebird
> > > S> aceita eu inserir um valor com 13 digitos.
> > >
> > > S> Alguem pode me dizer se ja passou por isso?
> > >
> > > S> Sidnei
> > > S> ______________________________________________
> > > S> FireBase-BR (www.firebase.com.br) - Hospedado em www.bavs.com.br
> > > S> Para editar sua configuração na lista, use o endereço
> > > S> http://mail.firebase.com.br/mailman/listinfo/lista_firebase.com.br
> > > S> Para consultar mensagens antigas: http://firebase.com.br/pesquisa
> > >
> > >
> > > ______________________________________________
> > > FireBase-BR (www.firebase.com.br) - Hospedado em www.bavs.com.br
> > > Para editar sua configuração na lista, use o endereço
> > > http://mail.firebase.com.br/mailman/listinfo/lista_firebase.com.br
> > > Para consultar mensagens antigas: http://firebase.com.br/pesquisa
> >
> >
> > ______________________________________________
> > FireBase-BR (www.firebase.com.br) - Hospedado em www.bavs.com.br
> > Para editar sua configuração na lista, use o endereço
http://mail.firebase.com.br/mailman/listinfo/lista_firebase.com.br
> > Para consultar mensagens antigas: http://firebase.com.br/pesquisa
>
>
> ______________________________________________
> FireBase-BR (www.firebase.com.br) - Hospedado em www.bavs.com.br
> Para editar sua configuração na lista, use o endereço
http://mail.firebase.com.br/mailman/listinfo/lista_firebase.com.br
> Para consultar mensagens antigas: http://firebase.com.br/pesquisa
>





Mais detalhes sobre a lista de discussão lista