Limpar bloco WHERE na segunda QUERY?

Dicas do Oracle Forms Builder - Blocos, Itens, LOV, Canvas, Triggers, comandos, PLL, d2kwutil, FMB, Alert, menus, etc
Responder
erokshark
Rank: Estagiário Júnior
Rank: Estagiário Júnior
Mensagens: 2
Registrado em: Qui, 29 Jan 2015 2:17 pm

Olá.

Estou tentando fazer uma consulta em um bloco com informação de CEP, rua, etc.
A query funciona perfeitamente, mas queria que o FORMS fizesse o seguinte:

-Executo a query pelo F7, busca normalmente;
-Quando eu apertar F8 novamente sem o F7, ele deve buscar todas as informações, limpando a cláusula WHERE do bloco.

Segue o código da trigger KEY-EXEQRY

Selecionar tudo

BEGIN
  IF (get_block_property( name_in('SYSTEM.TRIGGER_BLOCK'), QUERY_ALLOWED) = 'FALSE') THEN
    MESSAGE('Erro: Consulta não é permitida neste bloco');
    RAISE FORM_TRIGGER_FAILURE;
  END IF;
  

  
  IF name_in('SYSTEM.TRIGGER_BLOCK') = 'T0202' THEN
  	IF :SYSTEM.MODE = 'QUERY' THEN
  		set_block_property('T0202', DEFAULT_WHERE, ' ');
  		:T0202.COD_CEP_TELA := NULL;
  		CGBS$.DO_KEYQRY( name_in('SYSTEM.TRIGGER_BLOCK'), 'EXECUTE_QUERY', name_in('SYSTEM.MODE'));
  	END IF;
  	
  	IF :T0202.COD_CEP_TELA IS NOT NULL THEN
	  	set_block_property('T0202', DEFAULT_WHERE, 'T0202.COD_CEP = '||:T0202.COD_CEP_TELA);
	  	CGBS$.DO_KEYQRY( name_in('SYSTEM.TRIGGER_BLOCK'), 'EXECUTE_QUERY', name_in('SYSTEM.MODE'));
	  	set_block_property('T0202', DEFAULT_WHERE, ' ');
	  ELSE
    	CGBS$.DO_KEYQRY( name_in('SYSTEM.TRIGGER_BLOCK'), 'EXECUTE_QUERY', name_in('SYSTEM.MODE'));
    END IF;
  ELSE
  	CGBS$.DO_KEYQRY( name_in('SYSTEM.TRIGGER_BLOCK'), 'EXECUTE_QUERY', name_in('SYSTEM.MODE'));
  END IF;
END;
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

Tópico movido para FORMS.
Avatar do usuário
tiago_pimenta
Rank: DBA Júnior
Rank: DBA Júnior
Mensagens: 213
Registrado em: Qua, 29 Jun 2011 9:49 am
Localização: Barretos / SP

Deixa eu ver se entendi, se a consulta for usando F7 + F8, é uma determinada consulta, agora se for usando só F8, ai é outra consulta (Where) ?
FernandesRE
Rank: Estagiário Sênior
Rank: Estagiário Sênior
Mensagens: 11
Registrado em: Qui, 08 Jan 2015 9:22 pm

Você chegou a tentar fazer essas validações na pre-query?
erokshark
Rank: Estagiário Júnior
Rank: Estagiário Júnior
Mensagens: 2
Registrado em: Qui, 29 Jan 2015 2:17 pm

Acho que não expliquei muito bem, eu queria que o código executasse a consulta informada normalmente, mas ao realizar a consulta (F7 +F8) e depois pressionar F8 novamente, a busca seria refeita sem a condição informada anteriormente no F7. Segue código:

Selecionar tudo

BEGIN
  IF (get_block_property( name_in('SYSTEM.TRIGGER_BLOCK'), QUERY_ALLOWED) = 'FALSE') THEN
    MESSAGE('Erro: Consulta não é permitida neste bloco');
    RAISE FORM_TRIGGER_FAILURE;
  END IF;
  
  -- Verifica se é o bloco do cep e se está em modo de consulta
  IF name_in('SYSTEM.TRIGGER_BLOCK') = 'T0202' and
  	 :SYSTEM.MODE = 'ENTER-QUERY' and
  	 :T0202.COD_CEP_TELA IS NOT NULL THEN
  	-- Define a condição de pesquisa
  	set_block_property('T0202', DEFAULT_WHERE, 'T0202.COD_CEP = '||:T0202.COD_CEP_TELA);
  end if;
  -- Executa a query
  CGBS$.DO_KEYQRY( name_in('SYSTEM.TRIGGER_BLOCK'), 'EXECUTE_QUERY', name_in('SYSTEM.MODE'));
  -- Retira a condição definida anteriormente
  IF name_in('SYSTEM.TRIGGER_BLOCK') = 'T0202' and
  	 :SYSTEM.MODE <> 'ENTER-QUERY' and
  	 :T0202.COD_CEP_TELA IS NOT NULL THEN
  	set_block_property('T0202', DEFAULT_WHERE, ' ');
  end if;


END;
Avatar do usuário
tiago_pimenta
Rank: DBA Júnior
Rank: DBA Júnior
Mensagens: 213
Registrado em: Qua, 29 Jun 2011 9:49 am
Localização: Barretos / SP

Olha, eu pensei em você preencher algum parâmetro quando pressiona-se F7 e no F8 verifica-se se esse parâmetro está ou não preenchido, se tiver, ok, executa uma "where", se não tiver, executa outra "where" e no final do F8 zera-se novamente esse parâmetro.
FernandesRE
Rank: Estagiário Sênior
Rank: Estagiário Sênior
Mensagens: 11
Registrado em: Qui, 08 Jan 2015 9:22 pm

Olá Erokshark!

No pre-query você poderia setar o DEFAULT_WHERE sempre.

Você pode usar uma variável para montar o where de acordo com o informado pelo usuário, algo como :

Selecionar tudo

DECLARE
  vwhere varchar2(100);
BEGIN
  
  -- Verifica se é o bloco do cep e se está em modo de consulta
  IF name_in('SYSTEM.TRIGGER_BLOCK') = 'T0202' and
      :SYSTEM.MODE = 'ENTER-QUERY' and
      :T0202.COD_CEP_TELA IS NOT NULL THEN
     -- Define a condição de pesquisa
     vwhere := 'T0202.COD_CEP = '||:T0202.COD_CEP_TELA;
  end if;
  -- Executa a query
  set_block_property('T0202', DEFAULT_WHERE, vwhere);
  CGBS$.DO_KEYQRY( name_in('SYSTEM.TRIGGER_BLOCK'), 'EXECUTE_QUERY', name_in('SYSTEM.MODE'));
  
END;


[]s
Responder
  • Informação
  • Quem está online

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