Bloco do Forms baseado numa VIEW
13/09/2007
Uma coisa muito útil no Forms é poder basear os blocos em Views. Vamos a um breve exemplo: Digamos que uma tabela contenha os itens de um pedido. Obviamente, apenas o código do produto estará nesta tabela e não a descrição do produto. Como fazer para mostrar a descrição ?
Estrutura das tabelas: ITENS_PEDIDO IT_COD NUMBER(5), PROD_COD NUMBER(5), QUANT NUMBER(10,2) PRODUTO PROD_COD NUMBER(5), PROD_DSC VARCHAR2(60)
POUCO EFICIENTE
Podemos usar a trigger POST_QUERY, que é disparada em cada linha do bloco. Dentro desta trigger, coloca-se uma consulta assim:
select prod_dsc into :BLOCO_ITENS_PED.PROD_DSC from produto where prod_cod=:BLOCO_ITENS_PED.PROD_COD;
Este select rodará em cada linha do bloco, buscando a descrição do Produto. Temos que deixar a propriedade do item Database Item No.
Isto é pouquíssimo eficiente! Imaginem se o bloco for buscar 500 linhas? O cliente vai fazer 500 consultas de descrição!!! Resultado: Queda de performance do banco, trafego inútil na rede, etc.
MUITO EFICIENTE
Vamos basear nosso bloco numa View! Como fazemos isso?
1. Criamos uma VIEW_ITENS_PEDIDO com a descrição do Produto.
create or replace view VIEW_ITENS_PEDIDO as select a.*, b.prod_dsc from itens_pedido A, produto B where a.prod_cod=b.prod_cod
2. Criamos o bloco com base nesta view. Agora vamos tornar esta view “alterável”
3. Na propriedade do bloco DML Data Target Name, colocamos o nome da tabela onde será feita a alteração. (no caso, a própria ITENS_PEDIDO)
4. Vamos definir agora qual será o campo chave da tabela. Clicamos no item IT_COD, e vamos para a propriedade Primary Key. Colocamos YES nela.
5. Agora vamos dizer ao Forms que o campo PROD_DSC não faz parte da tabela! Alteramos a propriedade Query Only para Yes!
E Pronto!!!
Agora o Forms sabe que o campo PROD_DSC não deve ser gravado quando a tabela for modificada. Ele sabe que este campo não pertence diretamente a ITENS_PEDIDO!
Comente aqui
Tags: Bloco, Oracle Forms, View
