Pessoal, estou tentando sem sucesso o seguinte:
Efetuar um loop em um bloco no Forms 6i e em seguida, dentro do loop descobrir o nome do campo por onde ele está passando.
Alguém tem alguma luz sobre esta questão?
P.S.: já fiz isso dezenas de vezes em outras linguagens, mas no PL/SQL estou apanhando.
Obter o nome do campo pelo loop no bloco
-
- Rank: DBA Sênior
- Mensagens: 389
- Registrado em: Ter, 27 Jul 2010 1:34 pm
- Localização: Sapiranga - RS
- Contato:
Quem falou que programar era fácil??
Quanto mais dificil for a implementação mais valorizado seu trabalho será!
Acessem: www.gfkauer.com.br
Quanto mais dificil for a implementação mais valorizado seu trabalho será!
Acessem: www.gfkauer.com.br
Posso estar falando besteira, mas o campo pelo qual ele passa é o primeiro item navegavel do bloco.
-
- Rank: Oracle Guru
- Mensagens: 448
- Registrado em: Ter, 16 Jun 2009 3:07 pm
- Localização: Parobé - RS
Sérgio Luiz Bonemberger Junior
Programador Junior
Parobé RS
[]s
Programador Junior
Parobé RS
[]s
A não ser que você fique forçando que o forms troque de item ele vai ser o primeiro campo navegavel.
Pode pegar ele com isso.
Pode pegar ele com isso.
:system.cursor_item
-
- Rank: DBA Sênior
- Mensagens: 323
- Registrado em: Qui, 21 Set 2006 10:21 am
- Localização: Barala - TT
Então, agora acho que está quase lá, só faltou eu explicar um detalhe, esse Form é tabular e tenho cerca de 20 campos e apenas um registro.
A dica do :system.cursor_item só fica jogando para o primeiro campo e só passa por ele.
É assim mesmo que funciona? Pois eu preciso percorrer todos os campos.
Vlw.
A dica do :system.cursor_item só fica jogando para o primeiro campo e só passa por ele.
É assim mesmo que funciona? Pois eu preciso percorrer todos os campos.
Vlw.
-
- Rank: Oracle Guru
- Mensagens: 448
- Registrado em: Ter, 16 Jun 2009 3:07 pm
- Localização: Parobé - RS
Sérgio Luiz Bonemberger Junior
Programador Junior
Parobé RS
[]s
Programador Junior
Parobé RS
[]s
Cara agora me confudi.
Bloco tabular com apenas um registro????
Qual a sua necessidade de passar por todos os campos ??
Bloco tabular com apenas um registro????
Qual a sua necessidade de passar por todos os campos ??
-
- Rank: DBA Sênior
- Mensagens: 323
- Registrado em: Qui, 21 Set 2006 10:21 am
- Localização: Barala - TT
É que preciso checar se todos os campos estão preenchidos, e não quero ficar fazendo um monte de IF, pois além de "feio" e demorado creio que exista uma forma mais elegante de se fazer isso.
Em formulários Web já implementei essa lógica com JavaScript e em alguns sistemas utilizando Java + Swing também já fiz.
Só me enrolei no PL mesmo.
Em formulários Web já implementei essa lógica com JavaScript e em alguns sistemas utilizando Java + Swing também já fiz.
Só me enrolei no PL mesmo.
-
- Rank: DBA Sênior
- Mensagens: 389
- Registrado em: Ter, 27 Jul 2010 1:34 pm
- Localização: Sapiranga - RS
- Contato:
Quem falou que programar era fácil??
Quanto mais dificil for a implementação mais valorizado seu trabalho será!
Acessem: www.gfkauer.com.br
Quanto mais dificil for a implementação mais valorizado seu trabalho será!
Acessem: www.gfkauer.com.br
você tera que fazer algo assim:
agora se te atendera eu já não sei...
Begin
go_block('xx');
If name_in(:System.cursor_item) Is Null Then
sdhigsdfhg.s
End If;
next_item;
End;
-
- Rank: Oracle Guru
- Mensagens: 448
- Registrado em: Ter, 16 Jun 2009 3:07 pm
- Localização: Parobé - RS
Sérgio Luiz Bonemberger Junior
Programador Junior
Parobé RS
[]s
Programador Junior
Parobé RS
[]s
Cara se os campos não podem ser nulos tu pode setar o required deles pra true que resolve teu problema na origem, pois o usuário tera de informar eles.
Se não quer oribrigar os usuários a informarem na hora da digitação e só depois no commit tu pode fazer algo assim
Mas eu acredito que o melhor mesmo é fazer um grande if se não queres setar os campos como required.
Volto a frizar que o melhor a fazer é obrigar que o usuário informe os campos durante a digitação, de maneira que essa preucupação com capos obrigatórios não informados fique por conta do forms.
Se não quer oribrigar os usuários a informarem na hora da digitação e só depois no commit tu pode fazer algo assim
set_item_property('nome_bloco.nome_item', required,property_true);
set_item_property('nome_bloco.nome_item, item_is_valid,property_false);
go_block(nome_bloco);
validate(record_scope);
if :nome_bloco.nome_campo1 is null or
:nome_bloco.nome_campo2 is null then
message('Há campos obrigatórios que não foram preenchidos !');
pause;
end if;
-
- Rank: DBA Sênior
- Mensagens: 323
- Registrado em: Qui, 21 Set 2006 10:21 am
- Localização: Barala - TT
É que na verdade eu queria fazer algo mais direto tipo assim:
Eu sei que posso obrigar o usuário a digitar em outros locais, porém se eu conseguir definir uma lógica como está de forma genérica eu conseguiria aplica-la em outros pontos, tipo, hoje é para campos vazios, amanhã é só inverter a condição do if que tenho o mesmo validador com outro parâmetro, com uma mensagem de erro padrão, simples e funcional.
É como já disse no início, já fiz coisas assim e para o meu uso funcionou muito bem em outras linguagens, só tenho dúvida em como fazer isso no Forms.
message_erro := 'O campo: ';
loop varre_bloco_dados
if varre_bloco_dados.campo_corrente is null then
message(message_erro || varre_bloco_dados.campo_corrente.hint);
end if;
end loop;
É como já disse no início, já fiz coisas assim e para o meu uso funcionou muito bem em outras linguagens, só tenho dúvida em como fazer isso no Forms.
-
- Rank: Oracle Guru
- Mensagens: 448
- Registrado em: Ter, 16 Jun 2009 3:07 pm
- Localização: Parobé - RS
Sérgio Luiz Bonemberger Junior
Programador Junior
Parobé RS
[]s
Programador Junior
Parobé RS
[]s
Agora entendi.
Cara não cheguei a testar mas acredito que algo assim deva funcionar.
Cara... não cheguei a testar isso, só sai digitando aí, mas acredito que é + ou - o caminho pro que tu quer.
Posta aí se deu certo dpois
Cara não cheguei a testar mas acredito que algo assim deva funcionar.
declare
v_primeiro_campo varchar2(200);
begin
go_block('nome_bloco');
v_primeiro_campo := :system.cursor_item;
if name_in(v_primeiro_campo) is null then
message('O campo '||v_primeiro_campo||' não foi informado !');
pause;
end if;
next_item;
loop
if name_in(:system.cursor_record) is null then
message('O campo '||v_primeiro_campo||' não foi informado !');
pause;
end if;
if :system.cursor_item = v_primeiro_campo then
exit;
end if;
next_item;
end loop;
end;
Posta aí se deu certo dpois
-
- Rank: Oracle Guru
- Mensagens: 448
- Registrado em: Ter, 16 Jun 2009 3:07 pm
- Localização: Parobé - RS
Sérgio Luiz Bonemberger Junior
Programador Junior
Parobé RS
[]s
Programador Junior
Parobé RS
[]s
Só uma coisa q percebi, a segunda mensagem ta errada, substitui o v_primeiro_campo dela por :system.cursor_record
- 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
Bom dia pessoal,
Neste caso eu setaria o Required para YES do item conforme sugerido pelo Sérgio.
De qualquer forma, da para fazer sim da forma como sugerida no post. Vejam abaixo como eu faria...
Vejam que vou para o bloco, depois para o primeiro registro e dou o loop... no meu loop checo quantos campo forem necessários. Dai quando chegar no ultimo registro ele cai fora do loop.
Simples assim.
Boa sorte ai. Abs
Neste caso eu setaria o Required para YES do item conforme sugerido pelo Sérgio.
De qualquer forma, da para fazer sim da forma como sugerida no post. Vejam abaixo como eu faria...
BEGIN
GO_BLOCK('BLOCO');
LOOP
FIRST_RECORD;
IF :BLOCO.CAMPO1 IS NULL THEN
MESSAGE('Campo 1 deve ser informado.');
ELSIF :BLOCO.CAMPO2 IS NULL THEN
MESSAGE('Campo 2 deve ser informado.');
END IF;
IF :SYSTEM.LAST_RECORD = 'TRUE' THEN
EXIT;
END IF;
NULL;
END LOOP;
END;
Simples assim.
Boa sorte ai. Abs
-
- Informação
-
Quem está online
Usuários navegando neste fórum: Nenhum usuário registrado e 15 visitantes