Check box, execute query

Dicas do Oracle Forms Builder - Blocos, Itens, LOV, Canvas, Triggers, comandos, PLL, d2kwutil, FMB, Alert, menus, etc
Responder
pmv1980
Rank: Analista Júnior
Rank: Analista Júnior
Mensagens: 97
Registrado em: Qua, 07 Jan 2009 12:39 pm
Localização: Recife

Bom dia, gostaria de saber como eu faço a situação abaixo:

Em uma tela tenhos vários campos, e ao lado de cada um deles um check box, eu quero q ao marcar alguns desses checks, e clicar em um botão, seja chamada uma outra tela e nesta tem os mesmos campos, porém só quero q seja executada a query dos q eu marquei o check.

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

Se o seu bloco possui poucos campos, não tem problema em "varrer" o seu bloco buscando apenas os que você clicou com checkbox.
Daí você pode fazer INSERT desses valores numa tabela temporária (Global Temporary Table, por exemplo), daí basta fazer JOIN entre a GTT e sua tabela. Com isso, vai mostrar apenas os que você CHECKou...

Uma outra forma que eu já utilizei, quando a tabela era IMENSA, e não era possível ficar fazendo LOOP num bloco com milhares de linhas foi o seguinte:
* Criar a GTT acima com os mesmos campos da PK da tabela principal.
* Cada vez que alguém fazia CHECK o programa fazia INSERT na GTT

Dessa forma, ficava fácil o usuário poder filtrar coisas a vontade no bloco e clicar, pois mesmo fazendo execute query no bloco pra filtrar outras coisas, as "seleções" já feitas ficavam na GTT.

Dessa forma ficou bem rápido e flexível para o usuário, evitando longos LOOP em blocos.
RodrigoValentim
Moderador
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!!!

Dr, sua resposta acabou solucionando um problema meu.. não sei se vai funcionar mas vou testar! :lol: :lol: :lol:

quando crescer quero ser igual a você! kkkkk

Abraço!
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

:-D ahaohao beleza...

Eu ia comentar que também da pra alterar o default_where, mas daí é o mesmo caso citado anteriormente: Isso só vai prestar se forem poucas linhas clicadas.

Essa forma de ir salvando numa tabela o que o usuário checkou, pra mim é a melhor, pois fica bem rapido!
rodcapella
Rank: Programador Júnior
Rank: Programador Júnior
Mensagens: 19
Registrado em: Ter, 07 Jul 2009 10:26 am
Localização: Rio de Janeiro - RJ
_________________
Rodrigo Póvoa
Analista de Sistemas Júnior
Oracle Developer

Dr_Gori,

Excelente solução. Parei nesse tópico aqui por curiosidade e achei a sua solução muito interessante.
pmv1980
Rank: Analista Júnior
Rank: Analista Júnior
Mensagens: 97
Registrado em: Qua, 07 Jan 2009 12:39 pm
Localização: Recife

Agora surgiu um outro problema, quando eu clico no check, ele não salva a marcação, na configuração dele está marcado como insert e update como sim, e o bloco q é só de consulta está como update sim, para q eu consiga marcar o check e insert não. o check está como database não, alguém sabe o pode ser ?
RodrigoValentim
Moderador
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!!!

PMV, Observe se esse outro topico criado por você tem a solução para este problema.

http://glufke.net/oracle/viewtopic.php?t=4620

Coloquei aí a solução para esse tipo de erro.

Espero que ajude
pmv1980
Rank: Analista Júnior
Rank: Analista Júnior
Mensagens: 97
Registrado em: Qua, 07 Jan 2009 12:39 pm
Localização: Recife

bom dia, está tudo conforme o link, porém quando clico, e salvo ele informa que não existem alterações para salvar.
RodrigoValentim
Moderador
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!!!

Não tem alteração para gravar porque o chk esta como base de dados = Não

a ideia que te dei foi para você, atraves do click no check, fazer outra ação ou coisa do tipo.

Seria interessante você tentar explicar de forma completa e clara o que você quer, dessa forma, a gente pode lhe ajudar de forma rápida, pois, vejo que já não é o primeiro post seu solicitando ajuda, a gente ajudando e você sempre querendo algo mais... :)

posta aí pra gente qual sua ideia no contexto geral e então a ajuda vem de forma rápida para todos.

Abraços e fico aguardando seu post!
pmv1980
Rank: Analista Júnior
Rank: Analista Júnior
Mensagens: 97
Registrado em: Qua, 07 Jan 2009 12:39 pm
Localização: Recife

Tenho uma tela de consulta com vários registros e ao lado de cada um deles um check box, quando marcar alguns dos checks e clicar em um botão, será chamada uma outra tela, e nesta só devem aparecer os registros, onde o check foi marcado, deu pra entender ?
RodrigoValentim
Moderador
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!!!

Certo. Entendido... Você então tem duas alternativdas.
  • Ao clicar no check, fazer um insert na tabela temporaria anteriormente mostrado por Thomas e no outro bloco que será exibido você mostra o conteúdo delas.
  • Ao clicar no botão, varre as informações e insere todas elas na tabela temporaria e no outro bloco que será exibido você mostra o conteúdo delas.
É mais fácil fazer o insert direto quando se clica no check, tomando cuidado somente para fazer um delete quando desmarcar o check marcado... Fica aí a seu criterio.
pmv1980
Rank: Analista Júnior
Rank: Analista Júnior
Mensagens: 97
Registrado em: Qua, 07 Jan 2009 12:39 pm
Localização: Recife

Obrigado pela ajuda, mas só mais uma dúvida, dá certo, mesmo que ao clicar no check ele não salve ?
RodrigoValentim
Moderador
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!!!

Sim, pois, o insert está sendo via código e não via forms.
RodrigoValentim
Moderador
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!!!

Caso voCê não queira que essa mensagem apareca, use o recurso do message_level
Ex:

Selecionar tudo

:system.message_level := 5;
DO_KEY('COMMIT_FORM');     
:system.message_level := 0;
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

Eu sempre fiz assim:

Selecionar tudo

DECLARE
  VLEVEL NUMBER;
BEGIN
  VLEVEL:=:SYSTEM.MESSAGE_LEVEL;
  :SYSTEM.MESSAGE_LEVEL:=25;         
  COMMIT;
  :SYSTEM.MESSAGE_LEVEL:=VLEVEL;   
END;

Pois dessa forma, ele deixa MESSAGE_LEVEL do jeito que estava.
pmv1980
Rank: Analista Júnior
Rank: Analista Júnior
Mensagens: 97
Registrado em: Qua, 07 Jan 2009 12:39 pm
Localização: Recife

Mesmo sendo via código, se quando eu marco o check ele não salva, como vai saber as linhas que serão inseridas na tabela temporária ?
RodrigoValentim
Moderador
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!!!

Você fez o que foi explicado anteriormente? ou seja...
incluir um código semelhante a este na trigger de check-box changed???

Selecionar tudo

begin
insert into tabela (camp1, campo2, campo3) values (1,2,3); 
do_key('commit_form');
end;
Se ainda não estiver conseguindo, Revega tudo que informamos pra você... se não dar erro, se não exibe nada, debuga a rotina que você vai ver o que ocorre e corrigir.

Como conselho, pede um help a alguém ai que trabalha com você nessa mesma ferramenta, pois, as vezes o erro é uma besteira e não estamos vendo.
pmv1980
Rank: Analista Júnior
Rank: Analista Júnior
Mensagens: 97
Registrado em: Qua, 07 Jan 2009 12:39 pm
Localização: Recife

Um exemplo, criei essa tabela temporária, e quero inserir apenas os registros com o cheque = 57,
que são apenas duas linhas, porém está inserindo tudo na temporária e não apenas esses dois registros.

Selecionar tudo

Create Table temp as Select Conta
                     From Pagamento
                     
Begin

    For record in (Select Conta
              From Pagamento
             Where cd_cheque = 57) loop
                 
    insert into temp
    (Conta)
    values
    (record.Conta);

End Loop;
End;
RodrigoValentim
Moderador
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!!!

Faz separado a criação do bloco PL/SQL.

Sua criação da tabela está errada, pesquisa aqui no forum que tem alguns exemplos.... depois de criar corretamente, você vai conseguir.
Responder
  • Informação
  • Quem está online

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