[firebase-br] Alterar campo Computado
    Samuel Duarte Matos 
    samuelmatos em cprinformatica.com.br
       
    Qua Maio 30 13:29:48 -03 2007
    
    
  
Olá a todos!
Estou utilizando FB 1.5.4
Meu problema é o seguinte:
Tenho um campo numa tabela, e este campo é computado.
Ex.:
O nome do meu campo é VL_TOTALPEDIDO
e ele é computado assim: VL_TOTALPRODUTOS + VL_ACRESCIMO - VL_DESCONTO
Até aí tudo bem, funciona tudo perfeitamente.
Tenho várias procedures no banco que utilizam este campo.
Aí é que surge o problema: Tenho que modificar este campo VL_TOTALPEDIDO, e 
acrescentar um campo na "computação" dele. Ficaria assim: VL_TOTALPRODUTOS + 
VL_ACRESCIMO - VL_DESCONTO + VL_OUTROSACRESCIMOS
O problema é que, como existem váaaaarias procedures utilizando o campo, não 
consigo deletar o campo para criá-lo novamente. E nem alterá-lo, até onde eu 
sei.
Com isso, tive a "brilhante" idéia de modificar as tabelas do sistema. Fiz o 
seguinte SQL:
update rdb$fields f
set f.rdb$computed_source = '(VL_TOTALPRODUTOS + VL_ACRESCIMO - VL_DESCONTO 
+ VL_OUTROSACRESCIMOS + VL_TOTALIPI)'
where f.rdb$field_name = (select rf.rdb$field_source
                          from rdb$relation_fields rf
                          where rf.rdb$field_name = 'VL_TOTALPEDIDO' and
                                rf.rdb$relation_name = 'PEDIDO');
Funcionou, de certa forma. Utilizando o IBExpert, quando eu vou na tabela 
pedido, aparece o campo VL_TOTALPEDIDO com os campos computados, tudo 
certinho, mas a SOMA real não bate, ou seja o campo que eu adicionei não 
está sendo computado. Acredito que seja pq eu precisaria tb modificar o 
campo rdb$computed_blr, que é de onde o FB pega os campos realmente.
Perguntas
1.Tem como fazer isso?
2. Não tem como eu alterar um campo computado através da cláusula ALTER 
TABLE ALTER COLUMN?
Obrigado a todos
Samuel 
    
    
Mais detalhes sobre a lista de discussão lista