[firebase-br] Qual Campo usar Numeric ou Double Precision ?

Gladiston Santana gladiston em vidy.com.br
Qui Jul 7 09:19:13 -03 2016


Na minha opinião, você escolheu o método errado para ajustar isso.
Em nossos programas, o cadastro de unidades métricas faz algo similar, voce
define se a unidade permitirá inteiros ou fracionais, e o restante do
sistema tem de respeitar isso, mas o faz através de componente de entrada
de dados, um TEdit especial que se apercebe da unidade e disponibiliza a
quantidade de casas necessárias. Esse tipo de controle é melhor e mais
fácil de ser ajustado no lado cliente.

No lado server, os tipos são definidos sempre por domains, acho que seu
caso também deveria ser assim. Se alguma especificidade  do cliente
demandar alteração como tamanho de uma descrição, valor unitario,... o
script que possui o 'create domain' é alterado apenas para esse cliente.
Mas não poderá mudar depois que popular os dados, a menos que o 'alter
domain' permita isso (ele tem restrições quando a mudança é destrutiva).
Infelizmente, acho que não há nenhuma função que possa usar como constraint
para detectar quantas casas há na precisão de um valor para permitir ou
negá-lo, porque seria muito mais facil de você fazer o que quer sem nenhuma
alteração no lado cliente. Mas provavelmente seria possível via triggers --
eu não gosto de triggers quando elas causam o efeito em cascata de disparar
outras triggers, mas se ela 'morre' nela mesmo então não vejo problema
algum.

Pelo que entendi, você manipulava o tamanho de um campo, através das
tabelas de sistemas. Olha muito cuidado com isso, essa manipulação facilmente
causaria uma impossibilidade dum restore futuro, quando após algum tempo a
definiçao do tamanho de campo(metadados) se diferenciasse dos dados
[pré]existentes. Você arriscou os dados de seu(s) cliente(s), muito cuidado
dessa próxima vez. Recomendo que reveja os backups de seus clientes e se
possível, recomende a todos, que lhe envie o backup para testar se em algum
deles o restore irá falhar.

Se tiver usando Delphi, esses campos com decimais fixas são BCD e não
float, se valor valores referentes a dinheiro, eles não são double ou
float, eles são Currency (money no firebird). Tipagem inapropriada causa
dor de cabeça na hora de programar quando se precisa lidar com precisão
numerica, experiencia própria.

[]´s e sucesso.



Mais detalhes sobre a lista de discussão lista