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;
尝试一下它会起作用,或者如果仍然出现任何问题,请评论。
我在 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;
尝试一下它会起作用,或者如果仍然出现任何问题,请评论。