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

时间:2015-12-09 14:20:50

标签: forms oracle plsql oracleforms

我在oracle表单上的一个按钮中做了这个,从几个表记录中自动填写表单,当我运行表单时,它会抛出错误FRM - 40102 RECORD必须先输入或删除

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

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 个答案:

答案 0 :(得分:1)

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

find

不需要if语句之后的next_record。 现在您尝试从空记录转到下一条记录,然后系统会为您提供首先填写的错误消息

答案 1 :(得分:0)

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

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

试试这个它会起作用,或者如果仍然出现任何问题则发表评论。