Como sou novo em Forms, achei o loop o jeito mais fácil de se resolver esse 
problema, provavelmente, em termos de performace, ele vá ser mais custoso do 
que um controle via váriavel como o Chiappa disse, mas como já faz alguns dias 
que estou com isso para resolver, preferi fazer assim:

/* Verificando se os tipos de dose são diferentes */
declare
v_n_tipo number := 0;
v_n_count number := 0;
v_n_registros number := 1;
begin
go_block('medicamento_protocolo');
first_record;
v_n_tipo := :medicamento_protocolo.class_id_tipo_dose;
loop
if v_n_registros > 1 then

if v_n_tipo != :medicamento_protocolo.class_id_tipo_dose then
v_n_count := v_n_count + 1;
exit;
end if;

end if;
exit when :system.last_record = 'TRUE';
next_record;
v_n_registros := v_n_registros + 1;
end loop;
if v_n_count > 0 then
msg('Não é permitido Tipos de Dose diferentes no mesmo regime!');
raise form_trigger_failure;
end if;
end;

Dentro desse loop, alguem mudaria algo ? Visto que desse jeito está funcionando 
certim agora =D

[ ]s


________________________________
De: Étore Schiavini <et...@snpti.com.br>
Para: oracle_br@yahoogrupos.com.br
Enviadas: Quinta-feira, 14 de Julho de 2011 11:23
Assunto: RE: [oracle_br] Re: [Forms] Quantidade total de registros no bloco


  
Chiappa

Vou discordar de ti desta vez, acho que um loop no recordset  é uma solução 
melhor neste caso (na verdade “menos ruim”). Parto do princípio que o usuário 
não precisa ser avisado no momento da inclusão/alteração do registro, mas sim 
no commit.

Usar uma variável externa para controle implica em colocar código em mais 
pontos, não só no when-validate-record. No caso de existir apenas um registro 
no bloco e ele for excluído ou limpo a variável de controle também deve ser 
limpa. O tipo pode ser alterado via plsql em algum outro ponto do forms e nem 
sempre estas alterações disparam o when-validate-record. Enfim, acho complicado 
cobrir todas as possibilidades de forma simples.

Mas, se o Tiago partir para a solução de usar uma variável externa para 
controle sugiro um parameter e não uma global.
Aboli o uso de globals há muito tempo porque, como o próprio nome diz, o 
contexto delas é toda a aplicação e não somente o forms em questão (o ID delas 
é o próprio nome da global).
Só pra ficar num exemplo simples, se este mesmo forms for aberto duas ou mais 
vezes concomitantemente uma única global servirá a todas as instâncias do 
forms, bagunçando o controle.


Abraços

Étore Schiavini
<mailto:et...@snpti.com.br> et...@snpti.com.br
51 8116.4858

From: oracle_br@yahoogrupos.com.br [mailto:oracle_br@yahoogrupos.com.br] On 
Behalf Of José Laurindo
Sent: quinta-feira, 14 de julho de 2011 09:26
To: oracle_br@yahoogrupos.com.br
Subject: [oracle_br] Re: [Forms] Quantidade total de registros no bloco


Colega, com certeza :

1. no caso de Inserção, claro que se os registros são NOVOS, ainda não existem 
no database, então SIM, é Óbvio que não tem como obter isso via consulta no 
banco, os registros Não Estão lá ainda ...

2. como eu tinha dito, eu Acho que o mais eficiente seria vc validar já na hora 
que a informação entra, ie, tipo : vc tem uma variável Global, que inicialmente 
é nula, e tem na trigger when-validate-record um código tipo :

:global.tipo := :nomedobloco.nomedocampotipo

e aí, antes de aceitar a informação (trigger When-validate-Item do item Tipo no 
tal bloco-filho) :

IF :global.tipo is not null -- Já disparou anteriormente validate-record, já 
tenho um Tipo entrado, não posso aceitar Outro!
THEN
if :nomedobloco.TIPO <> :global.tipo then
raise form_trigger_failure('Já tem tipo entrado, Não pode digitar Outro!);
end if;
END IF;

3. Já pra UPDATEs, aí sim, a informação anterior Já Existe no database, aí sim 
vc pode fazer um SELECT no banco pra ver se mudou...

obs : nem preciso dizer, o que escrevi acima é PSEUDO-CÓDIGO, é só um EXEMPLO : 
NÃO use ipsis literis o que eu escrevi, E pense bem na lógica, adeque às suas 
necessidades... 

[]s

Chiappa

--- Em oracle_br@yahoogrupos.com.br <mailto:oracle_br%40yahoogrupos.com.br> , 
Tiago de Assis Pimenta <tiagopimenta@...> escreveu
>
> - Milton Bastos -
> 
> Eu coloquei [Forms] no subjects realmente para ficar claro que era sobre 
> Forms Builder que eu estava falando, mas agradeço da mesma forma ao amigo 
> Duilio pela ajuda.
> 
> - Duilio Bruniera Junior -
> 
> Sem problemas cara, muito obrigado pela ajuda.
> 
> - Chiappa -
> 
> É isso mesmo que eu preciso, para ser mais expecificio, eu tenho um bloco 
> master e um bloco filho, esse bloco filho é o bloco que eu preciso validar os 
> registros. Nesse bloco eu tenho uma coluna chamada "Tipo" e ela só pode ser 
> de um tipo. Então me pediram para fazer a verificação antes de inserir e 
> antes de atualizar, mas como no pre-insert e no pre-update não posso usar a 
> bult-in go_block e se não me engano a next_record também eu não posso usar, 
> resolvi fazer a validação no on-commit. Se você achar uma maneira mais 
> eficiente para tal, eu agradeceria se me avisasse.
> 
> - Étore Schiavini -
> 
> O que eu quiz dizer é o seguinte, se eu estiver inserindo novos registros, 
> não posso fazer a verificação que eu comentei com o Chiappa ali em cima 
> usando um select entende ? Pois eu ainda não tenho esses registros na tabela, 
> por isso * EU ACHO * que para fazer essa verificação, só fazendo um loop no 
> bloco antes mesmo dele gravar os registros na tabela.
> 
> O commit lá no final é porque eu estou fazendo a verificação no on-commit.
> 
> Galera, me desculpe se não fui claro de inicio.
> 
> [ ]s
> 
> 
> ________________________________
> De: Étore Schiavini <etore@...>
> Para: oracle_br@yahoogrupos.com.br <mailto:oracle_br%40yahoogrupos.com.br> 
> Enviadas: Quarta-feira, 13 de Julho de 2011 18:11
> Assunto: RE: [oracle_br] [Forms] Quantidade total de registros no bloco
> 
> 
> 
> Tiago 
> 
> Só agora que outros alertaram que eu vi que era um bloco de Forms :-)
> 
> Até agora não entendi o que tu quis dizer com "antes mesmo que esses
> registros estejam fisicamente no banco" mas vou desconsiderar essa sentença
> e responder a partir do resto da proposição. 
> 
> “Só que do jeito que está, dá pau se for um registro só.â€
> 
> Sim, porque aquele next_record antes do loop tá sobrando, ele impede o teste
> de um registro único.
> Suma com ele e tudo deve funcionar.
> 
> Estranhei aquele commit antes da última atribuição mas deve fazer sentido no
> contetxo do teu forms.
> 
> Abraço
> 
> Étore Schiavini
> <mailto:etore@...> etore@...
> 51 8116.4858
> 
> From: oracle_br@yahoogrupos.com.br <mailto:oracle_br%40yahoogrupos.com.br>  
> [mailto:oracle_br@yahoogrupos.com.br <mailto:oracle_br%40yahoogrupos.com.br> 
> ] On
> Behalf Of Tiago de Assis Pimenta
> Sent: quarta-feira, 13 de julho de 2011 14:57
> To: oracle_br@yahoogrupos.com.br <mailto:oracle_br%40yahoogrupos.com.br> 
> Subject: Re: [oracle_br] [Forms] Quantidade total de registros no bloco
> 
> 
> Eu acho que não, pois acho que vai ser alguma bult-in do forms. Para ajudar
> a compreender a minha dúvida, vou por o código abaixo:
> 
> /* Verificando se os tipos de dose são diferentes */
> declare
> v_n_tipo number := 0;
> v_n_count number := 0;
> begin
> go_block('medicamento_protocolo');
> first_record;
> v_n_tipo := :medicamento_protocolo.class_id_tipo_dose;
> next_record;
> loop
> if v_n_tipo != :medicamento_protocolo.class_id_tipo_dose then
> v_n_count := v_n_count + 1;
> end if;
> exit when :system.last_record = 'TRUE';
> next_record;
> end loop;
> if v_n_count > 0 then
> msg('Não é permitido Tipos de Dose diferentes no mesmo regime!');
> raise form_trigger_failure;
> else
> commit;
> :medicamento_protocolo.tipo_dose :=
> pck_util.fnc_get_descricao_class(:medicamento_protocolo.class_id_tipo_dose);
> end if;
> end;
> 
> Só que do jeito que está, dá pau se for um registro só.
> 
> [ ]s
> 
> ________________________________
> De: Duilio Bruniera Junior <bruniera@... <mailto:bruniera%40gmail.com>
> >
> Para: oracle_br@yahoogrupos.com.br <mailto:oracle_br%40yahoogrupos.com.br>  
> <mailto:oracle_br%40yahoogrupos.com.br> 
> Enviadas: Quarta-feira, 13 de Julho de 2011 13:49
> Assunto: Re: [oracle_br] [Forms] Quantidade total de registros no bloco
> 
> oh bgrother é isso que voce quer por um acaso?
> 
> SELECT S.blocks FROM DBA_SEGMENTS S WHERE S.owner='<OWNER>' AND
> S.segment_name='<NOME DA TABELA>';
> 
> Em 13 de julho de 2011 12:41, Tiago de Assis Pimenta <tiagopimenta@...
> <mailto:tiagopimenta%40ymail.com> 
> > escreveu:
> 
> > **
> >
> >
> > Senhores, boa tarde.
> >
> > Gostaria de saber como faço para pegar a quantidade toda de registros em
> um
> > bloco antes mesmo que esses registros estejam fisicamente no banco. Pois
> > estou rodando um loop para verificar se tem tipos de registros diferente
> em
> > uma determinada coluna, mas se tiver só um registro no bloco, não há
> > necessidade deu fazer tal procedimento.
> >
> > Já tentei com o query_hits mas o mesmo traz 0 mesmo eu setando a
> > propriedade do bloco "Consultar todos os registros" como SIM.
> >
> > Abraços
> >
> > Tiago Pimenta
> >
> > [As partes desta mensagem que não continham texto foram removidas]
> >
> > 
> >
> 
> [As partes desta mensagem que não continham texto foram removidas]
> 
> ------------------------------------
> 
> ----------------------------------------------------------
> >Atenção! As mensagens do grupo ORACLE_BR são de acesso público e de inteira
> responsabilidade de seus remetentes.
> Acesse: http://www.mail-archive.com/oracle_br@yahoogrupos.com.br/ 
> ----------------------------------------------------------
> >Apostilas » Dicas e Exemplos » Função » Mundo Oracle » Package » Procedure
> » Scripts » Tutoriais - O GRUPO ORACLE_BR TEM SEU PROPRIO ESPAÇO! VISITE:
> http://www.oraclebr.com.br/ 
> ---------------------------------------------------------- Links do Yahoo!
> Grupos
> 
> [As partes desta mensagem que não continham texto foram removidas]
> 
> [As partes desta mensagem que não continham texto foram removidas]
> 
> 
> 
> 
> [As partes desta mensagem que não continham texto foram removidas]
>

[As partes desta mensagem que não continham texto foram removidas]


 

[As partes desta mensagem que não continham texto foram removidas]

Responder a