Como popular combo ?

Dicas do Oracle Forms Builder - Blocos, Itens, LOV, Canvas, Triggers, comandos, PLL, d2kwutil, FMB, Alert, menus, etc
Responder
Rpizao
Rank: Programador Júnior
Rank: Programador Júnior
Mensagens: 22
Registrado em: Qua, 06 Jul 2005 11:33 am
Localização: RJ

Fala pessoal,
Estou comecando como membro hj.
Estou migrando do SQL Server para o ORACLE e pelo que já vi da syntax não vou ter muitos problemas.
Minhas duvidas se concentrar nos FORMS.
Tenho uma aplicacao onde tenho um bloco ligado a uma tabela, nele eu faco cadastro, alteracao e exclusao.
O problema e...existe uma chave estrangeira que precisa que apareca nesta tela como forma de combo e não estou tendo ideia de como fazer...
alguém poderia me ajudar? Como faco para popular uma combo com dados de uma tabela?
Obrigado pessoal e ate... :-o
Rafael.
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

Usa o POPUALTE_GROUP

Aí vai um exemplo:

Selecionar tudo

PROCEDURE pr_popula_fl_tipo ( pds_lista in varchar2 ) IS
  lrg_id 	recordgroup;
  lrg_nome	varchar2(40) := 'FL_TP_EMBARQUE';
  lcd_erro	number;
begin
     lrg_id := find_group(lrg_nome);
     if not id_null( lrg_id ) then 
        delete_group( lrg_id );
     end if;
     lrg_id := create_group_from_query(lrg_nome,
               'SELECT rv_meaning , '||
               ' rv_low_value '||
               'FROM cg_ref_codes '||
               'WHERE rv_domain = '||'''FL_TIPOS'''||
               'ORDER BY 1 ');
     lcd_erro := populate_group( lrg_id );
     clear_list(pds_lista); 
     populate_list(pds_lista,lrg_id ); 
end;
Rpizao
Rank: Programador Júnior
Rank: Programador Júnior
Mensagens: 22
Registrado em: Qua, 06 Jul 2005 11:33 am
Localização: RJ

Vlw cara...desculpa a demora em responder, já tinha lido sua msg e seu exemplo antes.
Obrigado pela dica, não entendi muito bem mas, vou papirar em cima dela pra poder criar um padrão que eu possa entender... :idea:
Abracos...
Rafael.
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

Realmente, o exemplo acima é meio complicado.
Veja esse e verás que a coisa é bem simples!!
Esse, eu tirei do HELP do forms - CREATE_GROUP_FROM_QUERY

Selecionar tudo

/*  
** Built-in:  CREATE_GROUP_FROM_QUERY 
** Exemplo:   Cria um record_group de uma query e popula um list_item.
*/ 
DECLARE 
  rg_name  VARCHAR2(40) := 'Salary_Range'; 
  rg_id    RecordGroup; 
  errcode  NUMBER; 
BEGIN 
  /* 
  ** Certifica que o grupo não existe ainda.
  */ 
  rg_id := Find_Group( rg_name ); 
  /* 
  ** Se não existe, cria ele e adiciona as duas
  ** colunas necessarias pra ele. 
  */ 
  IF Id_Null(rg_id) THEN 
    rg_id := Create_Group_From_Query( rg_name, 
                'SELECT SAL-MOD(SAL,1000) BASE_SAL_RANGE,' 
               ||'COUNT(EMPNO) EMPS_IN_RANGE ' 
               ||'FROM EMP ' 
               ||'GROUP BY SAL-MOD(SAL,1000) ' 
               ||'ORDER BY 1'); 
  END IF; 
  /* 
  ** Popula o grupo
  */ 
  errcode := Populate_Group( rg_id ); 

  /* 
  ** Apaga os elementos da sua lista
  */ 
  clear_list('bloco.seu_list_item'); 

  /* 
  ** popula seu item com o grupo criado
  */ 
  populate_list('bloco.seu_list_item' , rg_id );

END;
Rpizao
Rank: Programador Júnior
Rank: Programador Júnior
Mensagens: 22
Registrado em: Qua, 06 Jul 2005 11:33 am
Localização: RJ

Falai dr_Gori,
Vlw pelas dicas cara....eu consegui entender o funcionamento e porque usar cada linha....agora a parada ta mais clara na minha mente...
Consegui finalmente, com a sua ajuda, carregar os dados da tabela em na combo.
Mas agora quando rodo o codigo abaixo, o sistema gera o erro frm-41334 com a mensagem "grupo de registro invalido para o preenchimento da lista".
O que estou fazendo de errado?
Ai vai o codigo:

Selecionar tudo

DECLARE
  REC RECORDGROUP;
  NOME_GRUPO VARCHAR2(50) := 'REC_NOME_COMPANHIA';
  N_ERRO NUMBER;

BEGIN
  REC := CREATE_GROUP_FROM_QUERY(NOME_GRUPO, 'SELECT NOMECOMPANHIAAEREA
  FROM COMPANHIAAEREA');
  N_ERRO := POPULATE_GROUP(REC);
  POPULATE_LIST('CMB_NOME_COMPANHIA_AEREA', REC);
  EXECUTE_QUERY;
END;
Obrigado cara...
[]'s
Rafael. :D
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

Pra mim, é essa linha:

Selecionar tudo

POPULATE_LIST('CMB_NOME_COMPANHIA_AEREA', REC); 
Talvez você precisa especificar o bloco desse CMB_NOME_COMPANHIA_AEREA.
Rpizao
Rank: Programador Júnior
Rank: Programador Júnior
Mensagens: 22
Registrado em: Qua, 06 Jul 2005 11:33 am
Localização: RJ

Realmente parcero,
Eu já havia comentado essa linha e não deu o erro...
Estou me referenciando ao item desta forma e o erro persiste:

Selecionar tudo

POPULATE_LIST('BLK_COMPANHIA_AEREA.CMB_NOME_COMPANHIA_AEREA', REC);
Vlw chara...
Rafael.
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

OK. Já sei:
* é que pra popular um List Item , é necessario 2 campos!!! (um para o valor e outro pra descrição!)

Seu select está retornando apenas 1 campo!!! Veja se não é isso!
Rpizao
Rank: Programador Júnior
Rank: Programador Júnior
Mensagens: 22
Registrado em: Qua, 06 Jul 2005 11:33 am
Localização: RJ

Perfeito!!!
Muito obrigado cara...
Mas porque a obrigatoriedade dos dois valores?
Vlw pela ajuda cara....
Rafael. :D
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

É propriedade do LIST ITEM!

Tenta criar um LIST ITEM manualmente, e verá que você seta o CODIGO e a DESCRIÇÃO de cada item do LIST...
elkabong
Rank: Programador Pleno
Rank: Programador Pleno
Mensagens: 41
Registrado em: Seg, 31 Jul 2006 2:00 pm
Localização: Blumenau - SC

Fala povo, seguinte.......por mais que eu já tenha visto e revisto, não sei porque esse danado de record group não cria.
Como tem que ser a criação do list item EQUIPAMENTO.CD_LABORATORIO ???????
Como vai ser o Elements in List dele ????

Sempre que executo o fonte da o erro: "Cannot create Group RG_EQUIPAMENTO".

Alguém pode ajudar ???
Desde já, agradeço.

Selecionar tudo

PROCEDURE p_popula_listitem IS
  rg_id  RecordGroup;
  temp   NUMBER;
BEGIN
  rg_id := create_group_from_query('RG_EQUIPAMENTO',
	    'SELECT cd_laboratorio, ds_laboratorio '||
	    'FROM   laboratorio '||
	    'ORDER BY  1');
  --
  temp := populate_group(rg_id);
  --
  clear_list('EQUIPAMENTO.CD_LABORATORIO');
  --
  populate_list('EQUIPAMENTO.CD_LABORATORIO', rg_id);
  --
  delete_group(rg_id);
END;
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

está, tdo bem, mas pelo que entendi ele quer chamar uma FK num determinado cadastro, acho que a LOV fazendo a busca seria o caminho mais simples.
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

mas em todo caso, vou anotar a dica aqui pra caso eu precisar,heheh :lol:
elkabong
Rank: Programador Pleno
Rank: Programador Pleno
Mensagens: 41
Registrado em: Seg, 31 Jul 2006 2:00 pm
Localização: Blumenau - SC

Opa.....descobri o meu problema.
Pra quem interessar ai vai:

No meu caso a ordem e o tipo das colunas não estavam corretos.
Os valores da duas coluna devem ser do tipo VARCHAR2.
Então, no meu caso o SELECT ficou assim:

Selecionar tudo

SELECT ds_laboratorio, to_char(cd_laboratorio) 
Abraços.
jucruzjc
Rank: Programador Sênior
Rank: Programador Sênior
Mensagens: 57
Registrado em: Qui, 11 Jan 2007 10:26 am
Localização: Santa Bárbaba d'Oeste
--
Juliana Cr. Cruz
Analista Desenvolvedor Oracle

Bom dia pessoas!!!

Gente... eu entendi como faz o combo box e tudo mais...
Ele está funcionando belezinha!

Mas, no meu caso... ele está trazendo o codigo na lista.... eu queria que o valor aparecesse e o codigo ficasse "por trás"....

vejam o que eu fiz!

Selecionar tudo

      IF Id_Null(rg_id) THEN 
         rg_id := Create_Group_From_Query( rg_name, 
                'SELECT CODIGO, VALOR FROM ('
                ||'SELECT ''Produto / Descrição'' VALOR, ''@i_produto@''       CODIGO FROM dual UNION '
                ||'SELECT ''UM''                  VALOR, ''@i_um@''            CODIGO FROM dual UNION '
                ||'SELECT ''Quantidade''          VALOR, ''@i_quantidade@''    CODIGO FROM dual UNION '
                ||'SELECT ''Preço Unitário''      VALOR, ''@i_preço_unit@''    CODIGO FROM dual UNION '
                ||'SELECT ''% IPI''               VALOR, ''@i_tx_ipi@''        CODIGO FROM dual UNION '
                ||'SELECT ''Prazo Entrega''       VALOR, ''@i_prazo_entrega@'' CODIGO FROM dual UNION '
                ||'SELECT ''Detalhes''            VALOR, ''@i_descr_det@''     CODIGO FROM dual)'); 
      END IF; 

      -- Popula o grupo 
      errcode := Populate_Group( rg_id ); 
 
      -- Apaga os elementos da sua lista 
      clear_list('lss_oe_modelos_cotacao_tab.curinga'); 

      -- popula seu item com o grupo criado 
      populate_list('lss_oe_modelos_cotacao_tab.curinga' , rg_id ); 
Como eu faço para que na visualização apareça os valores????


Obrigada pessoas

bjão!!!
jucruzjc
Rank: Programador Sênior
Rank: Programador Sênior
Mensagens: 57
Registrado em: Qui, 11 Jan 2007 10:26 am
Localização: Santa Bárbaba d'Oeste
--
Juliana Cr. Cruz
Analista Desenvolvedor Oracle

Oi pessoas...

Consegui achar o problema.... só mudei a posição dos campos no select principal!!!....


Até mais....

bjão!
jucruzjc
Rank: Programador Sênior
Rank: Programador Sênior
Mensagens: 57
Registrado em: Qui, 11 Jan 2007 10:26 am
Localização: Santa Bárbaba d'Oeste
--
Juliana Cr. Cruz
Analista Desenvolvedor Oracle

Oi pessoas, tudo bem?

Eu fiz esse combo dinamico e deu certinho...
Mas o meu problema é que o forms monta a query e a lista de acordo com um if....

Ex:

Selecionar tudo


IF :qual_query = 'C' then
   .....

   IF Id_Null(rg_id) THEN 
      rg_id := Create_Group_From_Query( rg_name,  'SELECT VALOR, CODIGO FROM dual');
   end if;

   -- Popula o grupo 
   errcode := Populate_Group( rg_id ); 
 
   -- Apaga os elementos da sua lista 
   clear_list('lista_curinga'); 

   -- popula seu item com o grupo criado 
   populate_list('lista_curinga' , rg_id); 

ELSIF :qual_query = 'I' then

   .....

   IF Id_Null(rg_id) THEN 
      rg_id := Create_Group_From_Query( rg_name,  'SELECT NOME,ENDERECO FROM dual');
   end if;

   -- Popula o grupo 
   errcode := Populate_Group( rg_id ); 
 
   -- Apaga os elementos da sua lista 
   clear_list('lista_curinga'); 

   -- popula seu item com o grupo criado 
   populate_list('lista_curinga' , rg_id); 
END IF;

O problema é o seguinte...
Por exemplo, o user escolhe "C"... ele retorna os elementos certinhos.... mas se logo em seguida ele escolhe "I"... os elementos da lista permanecem com a anterior..... provavelmente porque o rg_id não é mais nulo....

Como eu falo para limpar os registros/list/rg_id? :?:


Obrigada desde já pessoas...
:wink:

bjão!!! :D
jucruzjc
Rank: Programador Sênior
Rank: Programador Sênior
Mensagens: 57
Registrado em: Qui, 11 Jan 2007 10:26 am
Localização: Santa Bárbaba d'Oeste
--
Juliana Cr. Cruz
Analista Desenvolvedor Oracle

Oi pessoas... consegui resolver!!!

Coloquei o seguinte codigo antes do if...

Selecionar tudo

   -- Certifica que o grupo não existe ainda. 
   rg_id := Find_Group( rg_name ); 

   IF Id_Null(rg_id) THEN 
      null;
   ELSE
      Delete_Group( rg_id );
   END IF;
:D
VivAaaaaaaaaaaaaa!!!

Obrigada pessoas!!

até!
Responder
  • Informação
  • Quem está online

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