Entrar

OracleBR

Dicas e Exemplos

Inicial - Banco de Códigos

Ordenar por campo display no Forms

Data de Inclusão: 06/10/2006 | Última Alteração: 06/10/2006
Tipo:Dicas e Exemplos | Enviada por: Moderador Oracle_br (moderador@oraclebr.com.br)


Mensagem postada no grupo oracle_br dia 06/10/2006:

A ordenação do Forms nativa é feita PELO BANCO,
portanto vc pode tranquilamente ordenar pela info não-base table DESDE
QUE seja possível ** AO BANCO ** ecuperar a informação, ok ? Exemplo,
Forms 6i C/S com banco 8i :

a) pra efeito de demonstração, crio um Forms bem simples, um só bloco
na tabela EMP do usuário SCOTT (o usuário-padrão de demos no 8i), com
os campos EMPNO, ENAME, DEPTO e SAL

b) manualmente crio um campo não-base table chamado NOME_DEPTO, a
informação dele (que será o nome de departamento) É POSSÌVEL de ser
recuperada no banco só com as colunas da tabela base-table EMP, então
poderei ordenar

c) crio ** NO BANCO ** - não é no Forms !! - a seguinte função :

FUNCTION BUSCA_NOME_DEPTO (P_DEPTO number) RETURN VARCHAR2 IS
v_nome_depto varchar2(80);
BEGIN
select dname into v_nome_depto from dept where deptno=P_DEPTO;
return v_nome_depto;
END;

d) seja depois duma query, seja quando o item base table DEPTNO for
alterado manualmente, quero buscar a descrição, assim crio a nível do
campo DEPTNO uma trigger POST-CHANGE com o seguinte código :

-- trigger POST-CHANGE
:NOME_DEPTO := BUSCA_NOME_DEPTO(:DEPTNO);

e pronto, a info será buscada. Usar a trigger POST-CHANGE (que
funciona em ambos os casos) é ao invés da POST-QUERY (que só funciona
pra queries) é técnica-padrão no Forms, mas não sei por que cargas
dágua quando dava treinamento de Forms quase ** nenhum ** dos meus
alunos a tinha usado antes :/


e) finalmente : como já tinha dito em msg anterior , o que o Forms faz
é montar um SQL com o nome dos campos, e adiconar o que estiver nas
propriedades de WHERE e de ORDER BY - na situação-exemplo até agora, o
SQL que seria montado e enviado seria :

SELECT ROWID,EMPNO,ENAME,SAL,DEPTNO FROM EMP

até aqui, tamos seguros ??? Muito bem, no seu caso provavelmente
ERRADAMENTE vc tascou na propriedade ORDER BY o texto :

:nomedobloco.nomedocamponãobasetable

assim sendo o SQL enviado pro banco foi :

SELECT ROWID,EMPNO,ENAME,SAL,DEPTNO FROM EMP ORDER BY
:nomedobloco.nomedocamponãobasetable

==> eu PERGUNTO, isso é valido pro banco, o banco SABE o que é esse
tal :nomedobloco.nomedocamponãobasetable pra odrenar por ele ?? Eu
mesmo respondo, È CLARO QUE NÃO, esse
:nomedobloco.nomedocamponãobasetable é algo que reside LÁ no Forms !!!

Pra obter o efeito desejado, na propriedade OPRDER BY vc deve colocar :

BUSCA_NOME_DEPTO(DEPTNO)

vamos ver o SQL que será montado e enviado pro banco com esse cara :

SELECT ROWID,EMPNO,ENAME,SAL,DEPTNO FROM EMP order by
BUSCA_NOME_DEPTO(DEPTNO)

==> eu pergunto, o banco SABE o que é esse BUSCA_NOME_DEPTO ??? SIM
!!! Sabe o que é esse DEPTNO ? SIM, é uma COLUNA da tabela! Portanto
ele PODERÁ ordenar por isso, o Forms IRÁ receber os regs ordenados...

Feita a fofoca, obtido o efeito, capicce ?

[]s

Chiappa


===========================================================
Participe do ENPO - Encontro de Profissionais Oracle 2006 !
Informações e inscrições em www.enpo-br.org
José Laurindo Chiappa, Palestrante ENPO-2006
===========================================================