Pesquisa
-
- Rank: Analista Júnior
- Mensagens: 97
- Registrado em: Qua, 07 Jan 2009 12:39 pm
- Localização: Recife
Eu tenho um campo de numero de documento e abaixo uma lista com vários números, tem como fazer uma pesquisar tipo a da lov, quando você vai digitando vai sendo listado, exemplo, eu começo com 1 e ele só listas os docs com inicio 1.
- dr_gori
- Moderador
- Mensagens: 5013
- 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
Você já respondeu a dúvida de alguém hoje?
https://glufke.net/oracle/search.php?search_id=unanswered
Bom, talvez dá pra fazer um TIMER que fique executando a query de tempos em tempos...
Ou melhor ainda: O timer guarda numa variável a última coisa que ele filtrou. Caso o campo esteja diferente, ele executa a query. Assim o programa não vai ficar executando muitas vezes se o usuário esquecer a tela aberta... sei lá, é uma idéia.
Ou melhor ainda: O timer guarda numa variável a última coisa que ele filtrou. Caso o campo esteja diferente, ele executa a query. Assim o programa não vai ficar executando muitas vezes se o usuário esquecer a tela aberta... sei lá, é uma idéia.
-
- Moderador
- Mensagens: 367
- Registrado em: Ter, 25 Mar 2008 3:41 pm
- Localização: Salvador - BA
Rodrigo Valentim
Analista de Sistemas
Oracle Developer
Campanha: Faça uma pesquisa antes de perguntar!!!
Analista de Sistemas
Oracle Developer
Campanha: Faça uma pesquisa antes de perguntar!!!
Deixa eu ver se eu entendi...
Você tem um campo (NR_DOC) que ao você digitar um valor, você quer que, em um LIST_ITEM ele filtre os valores dessa lista com base no que está sendo escrito no NR_DOC ?
Caso positivo, você pode criar essa lista de forma dinâmica a cada key-down disparado nesse campo NR_DOC.
Abaixo segue código para criação da lista...
Espero ter ajudado.
Você tem um campo (NR_DOC) que ao você digitar um valor, você quer que, em um LIST_ITEM ele filtre os valores dessa lista com base no que está sendo escrito no NR_DOC ?
Caso positivo, você pode criar essa lista de forma dinâmica a cada key-down disparado nesse campo NR_DOC.
Abaixo segue código para criação da lista...
PROCEDURE criar_lista (pQuery varchar2, pRgName varchar2, pNmLista varchar2) IS
BEGIN
/*
** Built-in: CREATE_GROUP_FROM_QUERY
** Exemplo: Cria um record_group de uma query e popula um list_item.
*/
DECLARE
rg_name VARCHAR2(40);
rg_id RecordGroup;
errcode NUMBER;
BEGIN
rg_name := pRgName;
/*
** 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, pQuery);
'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(pNmLista);
/*
** popula seu item com o grupo criado
*/
populate_list(pNmLista, rg_id );
END;
END;
-
- Rank: Analista Júnior
- Mensagens: 97
- Registrado em: Qua, 07 Jan 2009 12:39 pm
- Localização: Recife
A idéia é essa, mas seria possível ao invés do lista, ser em um text, porque eu tenho uma tela com 20 numeros de doc e acima um campo de pesquisa.
Digamos q eu entre com o num 1 para pesquisa, na tela só iriam aparecer os com inicio 1, deu pra entender ?
Eu vi isso em outro programa, mas não sei qual é a linguagem.
Digamos q eu entre com o num 1 para pesquisa, na tela só iriam aparecer os com inicio 1, deu pra entender ?
Eu vi isso em outro programa, mas não sei qual é a linguagem.
-
- Moderador
- Mensagens: 367
- Registrado em: Ter, 25 Mar 2008 3:41 pm
- Localização: Salvador - BA
Rodrigo Valentim
Analista de Sistemas
Oracle Developer
Campanha: Faça uma pesquisa antes de perguntar!!!
Analista de Sistemas
Oracle Developer
Campanha: Faça uma pesquisa antes de perguntar!!!
possível até é... se vai ficar legal eu não sei porque ainda não entendi onde você quer chegar.
você pode fazer um cursor usando like ':BLK.NR_DOC_PESQ%' e preencher os varios text com o resultado..[/code]
você pode fazer um cursor usando like ':BLK.NR_DOC_PESQ%' e preencher os varios text com o resultado..[/code]
-
- Rank: Analista Júnior
- Mensagens: 97
- Registrado em: Qua, 07 Jan 2009 12:39 pm
- Localização: Recife
Digamos q eu tenha uma tela de consulta, com 5 registros.
doc
1015
1018
2536
2555
1477
Dai no compo da pesquisa por documento, eu entro com 1, na medida em q vou digitando, ele deixa na tela apenas os q atenderem a minha pesquisa entendeu ?
doc
1015
1018
2536
2555
1477
Dai no compo da pesquisa por documento, eu entro com 1, na medida em q vou digitando, ele deixa na tela apenas os q atenderem a minha pesquisa entendeu ?
-
- Moderador
- Mensagens: 367
- Registrado em: Ter, 25 Mar 2008 3:41 pm
- Localização: Salvador - BA
Rodrigo Valentim
Analista de Sistemas
Oracle Developer
Campanha: Faça uma pesquisa antes de perguntar!!!
Analista de Sistemas
Oracle Developer
Campanha: Faça uma pesquisa antes de perguntar!!!
Acho que na trigger de KEY-DOWN relacionada ao campo da pra fazer.
a cada key-down, refaça a consulta deixando somente o que atende a condição
a cada key-down, refaça a consulta deixando somente o que atende a condição
-
- Rank: Analista Júnior
- Mensagens: 97
- Registrado em: Qua, 07 Jan 2009 12:39 pm
- Localização: Recife
Eu faço um cursor ?
Declare
Cursor cPesquisa is Select Nr_Documento
From Pagamento
Where Nr_Documento = :Pagamento.Nr_Documento;
nDoc Pagamento.Nr_Documento%TYpe;
Begin
Open cPesquisa;
Fetch cPesquisa Into nDoc;
Close cPesquisa;
If nDoc is Not Null Then
Execute_Query;
End If;
End;
-
- Moderador
- Mensagens: 367
- Registrado em: Ter, 25 Mar 2008 3:41 pm
- Localização: Salvador - BA
Rodrigo Valentim
Analista de Sistemas
Oracle Developer
Campanha: Faça uma pesquisa antes de perguntar!!!
Analista de Sistemas
Oracle Developer
Campanha: Faça uma pesquisa antes de perguntar!!!
o fetch é direto no campo da tela. assim, você so vai exibir o que atende sua solicitação, ou, você pode setar o default_where (não sei se pode dar set_block_property na key-down)
- gpilger
- Rank: Programador Júnior
- Mensagens: 29
- Registrado em: Qua, 21 Abr 2010 3:34 pm
- Localização: Novo Hamburgo - RS
Gilson Pilger
"Por não saber que erra impossível, ele foi lá e fez" autor desconhecido
"Por não saber que erra impossível, ele foi lá e fez" autor desconhecido
Não tinha pensando nisso ainda, mas acho que da pra fazer sim...
Pensei em fazer da seguinte forma.
1)Na trigger WHEN_NEW_ITEM-INSTANCE do campo de pesquisa eu criou um TIMER que é executado continuamente.
2)Na trigger WHEN-TIMER-EXPIRED, a nível de bloco, eu invoco esse TIMER e seto o default_where do bloco abaixo e executo a query. Isso eu vou fazer de segundo em segundo, de acordo com definido no TIMER criado acima.
3) Agora preciso que meu timer pare de executar algum momento. Isso eu faço no WHEN-VALIDADE-ITEM do campo de pesquisa. O mesmo que invoquei o timer. Mas porque na W-V-I? Porque assim tanto na saído pelo teclado quanto pelo mouse ela será executada, diferente da trigger KEY-NEXT-ITEM, que se restringe a saído do teclado.
Legal a idéia, vou ter replicá-la amanhã no trabalho. Muito barbada de fazer.
Se alguém conseguir fazer funcionar posta ai a solução, mesmo se for esta que dei.
Abraços,
Pensei em fazer da seguinte forma.
1)Na trigger WHEN_NEW_ITEM-INSTANCE do campo de pesquisa eu criou um TIMER que é executado continuamente.
DECLARE
v_timer TIMER;
tm_id TIMER;
V_SEG number := 60; -- 1 segundo
BEGIN
tm_id:=Find_Timer('MEU_TIMER');
IF NOT Id_Null(tm_id) THEN
Delete_Timer(tm_id);
END IF;
v_timer := CREATE_TIMER('MEU_TIMER',V_SEG,NO_REPEAT);
END;
IF GET_APPLICATION_PROPERTY(TIMER_NAME) = 'MEU_TIMER'
THEN
-- Defino o where
set_item_property('bloco.item',default_where,' documento_nro like '||:bloco.campo_pesquisa||'%');
-- atualizo aplicação
synchronize;
--executo a query
execute_query;
--
END IF;
DECLARE
v_timer TIMER;
tm_id TIMER;
V_SEG number := 60; -- 1
BEGIN
tm_id:=Find_Timer('MEU_TIMER');
IF NOT Id_Null(tm_id) THEN
Delete_Timer(tm_id);
END IF;
END;
Se alguém conseguir fazer funcionar posta ai a solução, mesmo se for esta que dei.
Abraços,
-
- Informação
-
Quem está online
Usuários navegando neste fórum: Nenhum usuário registrado e 2 visitantes