Como popular bloco não base table com várias tables relacion

Dicas do Oracle Forms Builder - Blocos, Itens, LOV, Canvas, Triggers, comandos, PLL, d2kwutil, FMB, Alert, menus, etc
Responder
Avatar do usuário
Porva
Rank: DBA Sênior
Rank: DBA Sênior
Mensagens: 342
Registrado em: Seg, 29 Jan 2007 7:36 am
Localização: São Paulo/SP
Rafael S. Nunes
São Paulo/SP

Galera, a pergunta pode ser meio idiota, mas é que aqui se utilizam muito list, então não manjo muito da manipulação de blocos multi record

como eu faço pro bloco exibir informações de tabelas relacionadas?

sei da propriedade WHERE CLAUSE, ORDER BY, mas onde e como eu especifíco as tabelas???


abraço
MARISTELAFALCO
Rank: Programador Júnior
Rank: Programador Júnior
Mensagens: 25
Registrado em: Seg, 17 Mar 2008 2:31 pm
Localização: MARINGA-PR

as propriedades do bloco você seta a propriedade QUERY DATA SOURCE TYPE como FROM CLAUSE QUERY.

e na propriedade QUERY DATA SOURCE NAME você escreve um select para trazer os dados q você quer, com base nas tabelas que você quiser.

os campos do bloco são base table yes com o mesmo nome e tipo do select.

where e order by clause podem ser usado normalmente, usando os nomes de colunas que o select retorna.
Avatar do usuário
Porva
Rank: DBA Sênior
Rank: DBA Sênior
Mensagens: 342
Registrado em: Seg, 29 Jan 2007 7:36 am
Localização: São Paulo/SP
Rafael S. Nunes
São Paulo/SP

valeu aí MARISTELAFALCO

vou tentar aqui

obrigado
Avatar do usuário
dr_gori
Moderador
Moderador
Mensagens: 5024
Registrado em: Seg, 03 Mai 2004 3:08 pm
Localização: Portland, OR USA
Contato:
Thomas F. G

Você já respondeu a dúvida de alguém hoje?
https://glufke.net/oracle/search.php?search_id=unanswered

Exatamente!
O procedimento é muito parecido com esse link:
http://glufke.net/oracle/viewtopic.php?t=5
(esse baseia um bloco numa view).

A única diferença é que dá pra basear direto num SQL, como a MARISTELAFALCO falou acima... :-o
Avatar do usuário
Porva
Rank: DBA Sênior
Rank: DBA Sênior
Mensagens: 342
Registrado em: Seg, 29 Jan 2007 7:36 am
Localização: São Paulo/SP
Rafael S. Nunes
São Paulo/SP

mas nesse caso, apenas os campos devem ser base table, porque não faz sentido o bloco ser, já que ele estará relaciodo a mais de uma tabela e servirá apenas para visualização de registros?
Avatar do usuário
Porva
Rank: DBA Sênior
Rank: DBA Sênior
Mensagens: 342
Registrado em: Seg, 29 Jan 2007 7:36 am
Localização: São Paulo/SP
Rafael S. Nunes
São Paulo/SP

tentei fazer aqui mas não consegui :(

Query Data Source Type: FROM Clause Query
Query Data Source Name:

Selecionar tudo

SELECT rhfunc.func_cd, 
       rhpessoa.pess_nm_nome, 
       TO_CHAR(Trunc(rhlotacao.data_dt_inicial,'DD') + 35, 'DD/MM/YY') Dt_Rh_45,        TO_CHAR(Trunc(rhlotacao.data_dt_inicial,'DD') + 80, 'DD/MM/YY') Dt_Rh_90 
  FROM rhpessoa, rhfunc, rhexper, rhlotacao, georgset
WHERE Clause:

Selecionar tudo

 WHERE rhpessoa.pess_cd = rhfunc.pess_cd
   AND rhfunc.empr_cd = rhlotacao.empr_cd
   AND rhfunc.func_cd = rhlotacao.func_cd
   AND rhlotacao.empr_cd = rhexper.empr_cd
   AND rhlotacao.func_cd = rhexper.func_cd
   AND rhlotacao.empr_cd = georgset.empr_cd
   AND rhlotacao.orgs_cd = georgset.orgs_cd
   AND rhlotacao.data_dt_final IS NULL
   AND rhlotacao.lota_cd = GetLotaCdPrincipal(rhlotacao.empr_cd, rhlotacao.func_cd, 'I', SYSDATE)
   AND rhlotacao.empr_cd = :b01.empr_cd
   AND EXISTS (SELECT NULL
                 FROM rhexpencar
                WHERE rhlotacao.empr_cd = rhexpencar.empr_cd
                  AND rhlotacao.orgs_cd = rhexpencar.orgs_cd
                  AND rhexpencar.func_cd = :b01.func_cd_resp_rh)
ORDER BY Clause:

Selecionar tudo

 ORDER BY 1
Data base Data block: No

Data base dos campos do select: Yes
e 1 campo é um check que criei que não é base table


para executar:

Selecionar tudo

GO_BLOCK('b02');
CLEAR_BLOCK(NO_VALIDATE);	
EXECUTE_QUERY;
aí aparece a msg: 41003 - Cannot function be performed here

obs: testei o Select no banco e funcionar normalmente, me retornando 2 registros para esse caso específico
gokden
Rank: DBA Pleno
Rank: DBA Pleno
Mensagens: 264
Registrado em: Dom, 19 Ago 2007 8:18 pm
Localização: Ribeirão Preto - SP
Lucas de Souza

OCA Developer
Analista de sistemas

você pode montar o select em uma string na pre-query, e setar essa string como query_data_source_name, desse jeito:

Selecionar tudo

set_block_property('nome do bloco',query_data_source_name,nome_da_variavel_que_tem_o_select);
=D
gokden
Rank: DBA Pleno
Rank: DBA Pleno
Mensagens: 264
Registrado em: Dom, 19 Ago 2007 8:18 pm
Localização: Ribeirão Preto - SP
Lucas de Souza

OCA Developer
Analista de sistemas

tinha esquecido de falar lá em cima....
sempre quando você mexer com blocos "From clause query"

você precisa preencher o campo "Query Data Source Columns" do bloco, com o nome dos campos que tem no seu select

=D
Responder
  • Informação
  • Quem está online

    Usuários navegando neste fórum: Nenhum usuário registrado e 21 visitantes