Buscar Registro Digitado

Dicas do Oracle Forms Builder - Blocos, Itens, LOV, Canvas, Triggers, comandos, PLL, d2kwutil, FMB, Alert, menus, etc
Responder
dcp
Rank: Programador Júnior
Rank: Programador Júnior
Mensagens: 17
Registrado em: Ter, 17 Set 2013 11:02 am

Olá galera, tenho uma duvida com Oracle Forms.
tenho um campo txt e um botão "buscar", também tenho um bloco com alguns registros, aprox 30.
como faço para, assim que eu digitar o texto que quero no campo txt, e apertar o botão "buscar", gostaria que o registro percorresse o bloco e parasse justamento no que foi digitado.
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

Tenta algo assim ao clicar no botão.

Selecionar tudo

GO_BLOCK('bloco');
FIRST_RECORD;
BEGIN
  LOOP
    IF :bloco.campo = :blocoBusca.Sarch OR :system.last_record='TRUE'
    THEN exit;
    ELSE  next_record;
    END IF;
  END LOOP;
END;
dcp
Rank: Programador Júnior
Rank: Programador Júnior
Mensagens: 17
Registrado em: Ter, 17 Set 2013 11:02 am

entendi amigo mas se minha condição for ex .

no meu bloco onde sera mostrado os registros, tenho la algumas descrições em tabular ex.

Selecionar tudo

"TESTE DE QUALIDADE"
" BATATA"
"TESTE DE VELOCIDADE"
" MORANGO"
ai no :bloco.campo eu digito o seguinte " TESTE" cliclo no botão
os registro já listado la no bloco que comece com "TESTE" irá aparecer, ou se eu digitar por completo pra filtrar mais ex.

Selecionar tudo

"TESTE DE QUALIDADE" 
"TESTE DE VELOCIDADE"
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

Então você quer fazer um FILTRO certo ? (Não quer apenas "posicionar" no registro).

pra fazer um filtro, basta utilizar o valor do campo BUSCA na cláusula WHERE do seu bloco. (suponho que ele seja base-table).

Mais ou menos assim:
Propriedade do bloco / WHERE:

Selecionar tudo

( :bloco.busca IS NULL
OR
seucampo like '%'||:bloco.busca||'%' )
Basta você colocar um EXECUTE_QUERY no seu botão de consulta.
Desta forma, caso você preencheu algo no campo BUSCA, ele vai utilizar como filtro LIKE.

era isso ?
dcp
Rank: Programador Júnior
Rank: Programador Júnior
Mensagens: 17
Registrado em: Ter, 17 Set 2013 11:02 am

Isso, pode ser apenas "posicionar" no registro, o que preciso é que não necessariamente eu digite no ":bloco.busca" a palavra completa para que ele faça a busca nos meus 30 registros abaixo em outro bloco em um campo "disp item" em tabular, e posicione no 1° registro que tiver a descrição que o usuário digitou.

Selecionar tudo

GO_BLOCK('BL_UNID');
FIRST_RECORD;
BEGIN	
  LOOP  	 	
    IF :BLOCO.BUSCAR = :BLOCO.DISPITEM OR :system.last_record = 'TRUE'  THEN 
    exit ;    
    ELSE  next_record;    	
    END IF;
  END LOOP;
END;
Creio que precise de um like em algum momento para poder o sistema percorre até achar a descrição digitada ou parte do que foi.
dcp
Rank: Programador Júnior
Rank: Programador Júnior
Mensagens: 17
Registrado em: Ter, 17 Set 2013 11:02 am

da forma acima está correta,consegui fazer só não consigo filtrar caso o usuário digite uma parte do que esta escrito.
dcp
Rank: Programador Júnior
Rank: Programador Júnior
Mensagens: 17
Registrado em: Ter, 17 Set 2013 11:02 am

E ai galera.. ontem resolvi o problema,,

ta ai a solução

Selecionar tudo

DECLARE
	
V_CONT NUMBER;

BEGIN
	
	IF :PESSOA.BUSCAR_AVALIACAO IS NULL  THEN
	 MSG('Atenção:  Avaliação não encontrada.');
	 GO_ITEM('BL_PRES.BTN_BUSCA');
	END IF;	
	
	GO_BLOCK('BL_PRES');
	
	IF V_CONT = 0  THEN 
		
  FIRST_RECORD; 
  
	ELSE
		
	next_record;

	END IF;	
	
  LOOP  
    	  	
       IF  (substr(:BL_PRES.API_PRES_DESCR,1,length(:PESSOA.BUSCAR_AVALIACAO)) = substr(:PESSOA.BUSCAR_AVALIACAO,1,length(:BL_PRES.API_PRES_DESCR)))
    	  OR :system.last_record = 'TRUE'  THEN 
    	  
      	V_CONT := V_CONT + 1;      	
      	
            exit ;             
    	
       END IF;
       
       next_record;
   
  END LOOP;  
  
  IF :system.last_record = 'TRUE' THEN
  	 MSG('Ultimo Registro com a Busca' ||' '||'"'|| :PESSOA.BUSCAR_AVALIACAO||'"' ||' '|| 'Deseja continuar a buscar do primeiro registro ?' );
  	 FIRST_RECORD;
  END IF; 	 
  
END;


Responder
  • Informação
  • Quem está online

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