Erro FRM-40102 - O registro deve ser informado ou excluído

Dúvidas, dicas e truques de PL/SQL. Aqui também vão assuntos relacionados a pacotes, triggers, funções, Java-Stored Procedures, etc
Responder
manoelufsc
Rank: Estagiário Pleno
Rank: Estagiário Pleno
Mensagens: 4
Registrado em: Ter, 26 Ago 2014 3:11 pm

Olá a todos, estou com um problema que não consigo achar a solução. Vou tentar ser bem detalhista.

Utilizo oracle forms versão 6.0 e oracle 10g.

Tenho duas tabelas, A e B, sendo que tenho um campo cd_chave que liga as tabelas.

O meu problema é o seguinte, se eu aperto F7, depois F8 (consultando os dados das tabelas), e depois eu aperto em um botão, que está em uma toolbar utilizada no local que trabalho, que chama "DO_KEY(CREATE_RECORD)" aparece o erro "FRM-40102 - O registro deve ser informado ou excluído primeiro."

Esse erro não acontece, se eu apenas ficar inserindo registros na tabela A.

* No evento "When-New_Form_Instance" eu chamo uma procedure, "INSERE_REGISTROS" que faz um select, e insere registros na tabela B:

Selecionar tudo

GO_BLOCK('TABELA_B');
  
  FIRST_RECORD;
  OPEN C1;
  LOOP
     FETCH C1 INTO R1;
     
     EXIT WHEN C1%NOTFOUND;
     
     IF :SYSTEM.RECORD_STATUS <> 'NEW' THEN
     	 CREATE_RECORD;
     END IF;
     
     :TABELA_B.CD_RESPOSTA := 'N';
     :TABELA_B.CD_TRIAGEM  := :TABELA_A.CD_TRIAGEM;
     :TABELA_B.CAMPO_X     := R1.CAMPO_Y;
     :TABELA_B.CAMPO_W := R1.CAMPO_Z;
     
[b]     Set_Record_Property(:system.trigger_record, 'TABELA_A', STATUS, QUERY_STATUS);[/b]
  END LOOP;	
  FIRST_RECORD;
  CLOSE C1;
* No evento "KEY-CREREC" eu faço um create_record, acho que o problema pode ser aqui

Selecionar tudo

declare
	id_timer timer;
BEGIN
  IF :SYSTEM.RECORD_STATUS <> 'NEW' THEN
    CREATE_RECORD;
  END IF;
     
	
 id_timer := create_timer('NOVO_REGISTRO', 1, no_repeat); 
exception
    when others then
      controle_de_msg('ERR', sqlerrm);
END; 
* Esse timer "NOVO_REGISTRO" está definido assim:

Selecionar tudo

(...)
  elsif get_application_property(timer_name) = 'NOVO_REGISTRO' then
	  go_block('TABELA_B');
         clear_block(no_validate);
  
    INSERE_REGISTROS;
  end if;
* Na tabela A e B, NÃO existe campo obrigatório.

Alguma sugestão?
manoelufsc
Rank: Estagiário Pleno
Rank: Estagiário Pleno
Mensagens: 4
Registrado em: Ter, 26 Ago 2014 3:11 pm

Ahhh eu consegui identificar o problema, mas não a solução ainda, ele ocorre ao executar o método:

No timer "NOVO_REGISTRO", quando executa

"Go_Block(Tabela_B)", ocorre o erro, só para reforçar o fluxo desta tabela:

-> Ao abrir a tela, eu incluo registros nela.
-> F7-F8, consulta
-> Clico no do_key(create_record)
Responder
  • Informação
  • Quem está online

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