Validação

Dicas do Oracle Forms Builder - Blocos, Itens, LOV, Canvas, Triggers, comandos, PLL, d2kwutil, FMB, Alert, menus, etc
Responder
tora34
Rank: Analista Pleno
Rank: Analista Pleno
Mensagens: 108
Registrado em: Qua, 12 Nov 2008 6:01 pm
Localização: Campo Mourão PR

ola sou novo por aqui..
situação... estou tentando criar uma trigger When-validate-item, para quando digitar os campos abaixos se completarem, mas da o erro Ora-01422, sei que esse é porque o valor que ele busca é mais que uma linha, mas é isso mesmo, quero preencher os campos com varias linhas, mas não da certo se digito um codigo que busca só uma linha da certo, mas quero que busque todas as linhas

valeu
ederphil
Rank: Programador Sênior
Rank: Programador Sênior
Mensagens: 52
Registrado em: Qua, 15 Out 2008 4:05 pm
Localização: taquara-RS

dae tranquilo??

cara o When-validate-item é para validar o campo..

no teu caso tu qué popular os campos.. é isso??

posta o código aí..


vlw
tora34
Rank: Analista Pleno
Rank: Analista Pleno
Mensagens: 108
Registrado em: Qua, 12 Nov 2008 6:01 pm
Localização: Campo Mourão PR

o sistema é de uma locadora

Selecionar tudo

 
begin
 
select SEQ_LOCACAO,COD_MIDIA,DAT_A_DEVOLVER,sysdate
into :cvl_devolucao.seq_locacao,    :cvl_devolucao.COD_MIDIA,  :cvl_devolucao.DAT_A_DEVOLVER, :cvl_devolucao.DAT_DEVOLUCAO
 from cvl_locacao_midia
	  where seq_locacao=(select seq_locacao from cvl_locacao_midia 
	                        where cod_midia=:cvl_devolucao.va_cod_midia);
end;
valeu
ederphil
Rank: Programador Sênior
Rank: Programador Sênior
Mensagens: 52
Registrado em: Qua, 15 Out 2008 4:05 pm
Localização: taquara-RS

tenta assim..

Selecionar tudo

BEGIN
  --
  SELECT seq_locacao
           ,  cod_midia
           ,  dat_a_devolver
           ,  sysdate
     INTO :CVL_DEVOLUCAO.seq_locacao
           , :CVL_DEVOLUCAO.cod_midia
           , :CVL_DEVOLUCAO.dat_a_devolver
           , :CVL_DEVOLUCAO.dat_devolucao
    FROM cvl_locacao_midia
  WHERE seq_locacao = (SELECT seq_locacao
                                       FROM cvl_locacao_midia
     WHERE cod_midia = :CVL_DEVOLUCAO.va_cod_midia
         AND rownum = 1);
--
END;
valeu
ederphil
Rank: Programador Sênior
Rank: Programador Sênior
Mensagens: 52
Registrado em: Qua, 15 Out 2008 4:05 pm
Localização: taquara-RS

Selecionar tudo


BEGIN
-- 
  SELECT seq_locacao
            , cod_midia
            , dat_a_devolver
            , sysdate
      INTO :CVL_DEVOLUCAO.seq_locacao
            , :CVL_DEVOLUCAO.cod_midia
            , :CVL_DEVOLUCAO.dat_a_devolver
            , :CVL_DEVOLUCAO.dat_devolucao
     FROM cvl_locacao_midia
   WHERE seq_locacao = (SELECT seq_locacao
     FROM cvl_locacao_midia
   WHERE cod_midia = :CVL_DEVOLUCAO.va_cod_midia
       AND rownum = 1);
-- 
END; 
tora34
Rank: Analista Pleno
Rank: Analista Pleno
Mensagens: 108
Registrado em: Qua, 12 Nov 2008 6:01 pm
Localização: Campo Mourão PR

opa olha... continua dando o erro ORA-01422..
esse erro diz que tem muitas linhas, mas eu quero carregar varias linhas mesmo.
obrigado
schnu
Rank: Analista Pleno
Rank: Analista Pleno
Mensagens: 110
Registrado em: Ter, 24 Mai 2005 9:16 pm
Localização: Dongguan - Guangdong - China

O problema é que você esta fazendo uma validação de campo onde está retornando mais de uma linha para validar e por isso o form te retorna esse erro. Se você quiser popular os campos tera que fazer com que cada linha retornada da sua query abra um novo registro no form.
tora34
Rank: Analista Pleno
Rank: Analista Pleno
Mensagens: 108
Registrado em: Qua, 12 Nov 2008 6:01 pm
Localização: Campo Mourão PR

e como faço isso??
schnu
Rank: Analista Pleno
Rank: Analista Pleno
Mensagens: 110
Registrado em: Ter, 24 Mai 2005 9:16 pm
Localização: Dongguan - Guangdong - China

Primeiro tenho que entender o que você realmente quer fazer...

Se quiser popular outros campos do form quando validar 1 determinado campo, tera que fazer com que sua consulta retorne somente 1 registro com todas as colunas que deseja.

Ou você deseja gerar varios registros no form apartir da validacao ???

Explique melhor o que você precisa fazer que é mais facil para a gente poder te ajudar
tora34
Rank: Analista Pleno
Rank: Analista Pleno
Mensagens: 108
Registrado em: Qua, 12 Nov 2008 6:01 pm
Localização: Campo Mourão PR

ola.. boa noite, desde já agradeço pela ajuda:
seguinte essa é a tela que estou desenvolvendo, a idéia é que quando digitar o cod_midia no primeiro campo, já carregar o nome do cliente, e todas as midias locadas juntas (nos campos dentro do frame devolução) com esta primeira que digitei o codigo.

Imagem


Obrigado[/img]
schnu
Rank: Analista Pleno
Rank: Analista Pleno
Mensagens: 110
Registrado em: Ter, 24 Mai 2005 9:16 pm
Localização: Dongguan - Guangdong - China

Se eu entendi o que você quer o codigo abaixo pode lhe ajudar, porem o que esta no frame devolucao não pode ser base table. Se for basetable, você não pode executar o codigo abaixo que ira dar erro.

OBS: não testei codigo

Selecionar tudo

 declare 
 cursor c1 is
 SELECT seq_locacao 
            , cod_midia 
            , dat_a_devolver 
            , sysdate 
      INTO :CVL_DEVOLUCAO.seq_locacao 
            , :CVL_DEVOLUCAO.cod_midia 
            , :CVL_DEVOLUCAO.dat_a_devolver 
            , :CVL_DEVOLUCAO.dat_devolucao 
     FROM cvl_locacao_midia 
   WHERE seq_locacao = (SELECT seq_locacao 
     FROM cvl_locacao_midia 
   WHERE cod_midia = :CVL_DEVOLUCAO.va_cod_midia 
       AND rownum = 1); 
   --
  r1 c1%rowtype;
  --
BEGIN
-- 
  open c1;
  fetch c1 into r1;
  --
  while c1%found loop
    --
    :bloco.nome_campo  :=  r1.cod_midia;
    :bloco.nome_campo  :=  r1.dat_a_devolver;
    --
    exit when :system.last_record = 'TRUE';
    fetch c1 into r1;
    next_record;
    --
  end loop; 
  --
  close c1;
-- 
END;
tora34
Rank: Analista Pleno
Rank: Analista Pleno
Mensagens: 108
Registrado em: Qua, 12 Nov 2008 6:01 pm
Localização: Campo Mourão PR

opa..
funcionou..... obrigado
edson.amorim
Rank: Analista Sênior
Rank: Analista Sênior
Mensagens: 135
Registrado em: Qui, 04 Out 2007 3:36 pm
Localização: Belo Horizonte - MG

Caro Tora34,

Então, achei muito interessante essa sua postagem e, a título de aprendizado também, gostaria muito de entender este seu sisteminha, ou seja; no passo a passo, como é que isso funciona?? você criou a tela, a partir de qual tabela? e como você usa esse código?

Lhe agradeço muito pela ajuda!!

Edson
Responder
  • Informação
  • Quem está online

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