Oracle 表单 FRM-40102:必须先输入或删除记录

Oracle forms FRM-40102:RECORD MUST BE ENTERED OR DELETED FIRST

我在 oracle 表单上的一个按钮中做了这个,以自动从几个 table 记录填写表单,当我 运行 表单时它抛出错误 FRM - 40102 RECORD MUST BE ENTERED OR DELETED第一

我先尝试手动删除默认记录,但它似乎没有改变。

DECLARE
 /* cursor declaration */

 CURSOR C IS 
 SELECT ALU.IDEALU, EVA.IDEEVA, UNI.IDEUNI, MAT.IDEMAT
 FROM ALU, EVA, UNI, MAT
 ORDER BY ALU.IDEALU;

 ALT NUMBER;
 R C%ROWTYPE;
 N NUMBER;
 errnum NUMBER       := ERROR_CODE; 
   V_CONT NUMBER;
   AL_CONT NUMBER;
 V_ADD_AMT NUMBER; 
 V_ADD_DEDUCT NUMBER; 
 V_SAL_ADD_AMT NUMBER;
 BEGIN

 SELECT COUNT(IDEALU) INTO AL_CONT
 FROM ALU;

/*cursor open*/
 OPEN C;
 --================= 
   IF errnum = 40508 THEN     
        ALT:=SHOW_ALERT('FAIL');
        RAISE Form_Trigger_Failure; 
   END IF;      
 --================     
      GO_BLOCK('CAAE');     
      IF AL_CONT=0 THEN
      FIRST_RECORD;
      ALT:=SHOW_ALERT('FAIL');
      ELSE
           LAST_RECORD;
           NEXT_RECORD;
      END IF;
      NEXT_RECORD;
 LOOP
  FETCH C INTO R;               ----cursor fetch/read      
  :CAAE.CAAEALU:=R.IDEALU;         --- data assign...
  :CAAE.CAAEEVA:=R.IDEEVA;
  :CAAE.CAAEUNI:=R.IDEUNI;
  :CAAE.CAAEMAT:=R.IDEMAT;
  EXIT WHEN C%NOTFOUND; 
  NEXT_RECORD;  
 END LOOP;
 PREVIOUS_RECORD;
 CLOSE C;

END;

在您的代码中,您执行了 2 次 next_record 而没有填写任何字段:

 IF AL_CONT=0 THEN
      FIRST_RECORD;
      ALT:=SHOW_ALERT('FAIL');
      ELSE
           LAST_RECORD;
           NEXT_RECORD;
      END IF;
      NEXT_RECORD;

if语句后面的next_record不需要。 现在你尝试从一个空记录转到下一个记录,然后系统给你错误信息,你需要先填写它

你的问题Next_Record;命令,你可以做的是检查每个 next_record 的以下条件,下面是示例:

IF :SYSTEM.LAST_RECORD = 'TRUE' AND :CAAE.CAAEALU IS NOT NULL THEN
   NEXT_RECORD;
END IF;

尝试一下它会起作用,或者如果仍然出现任何问题,请评论。