题记:近日在做一个考察报告录入的form开发,遇到这样一个问题:有一个界面本来只能录入一次数据,但是当我录入数据不保存, 然后再点击新建或者KEY-DOWN键,界面被刷新了,再输入数据保存,会同时保存两条数据。
分析:
打开界面时,:SYSTEM.BLOCK_STATUS='NEW',此时点击新建或者KEY-DOWN键,会提示:FRM-40102:记录必须被插入或删除。
界面数据发生变化时,:SYSTEM.BLOCK_STATUS='CHANGED',此时点击新建或者KEY-DOWN键,界面被刷新,输入的是第二条数据。
保存或查询时,:SYSTEM.BLOCK_STATUS='QUERY',此时点击新建或者KEY-DOWN键,界面被刷新,输入的是第二条数据。
解决方案:在需要控制的BLOCK中加入WHEN-CREATE-RECORD触发器,在根据:SYSTEM.BLOCK_STATUS的值进行控制。
IF :SYSTEM.BLOCK_STATUS = 'QUERY' THEN
RAISE Form_Trigger_Failure;--阻止程序继续进行
ELSIF :SYSTEM.BLOCK_STATUS = 'CHANGED' THEN
--给有好提示
FND_MESSAGE.SET_STRING('请在继续前先保存所做更改。');
FND_MESSAGE.SHOW;
RAISE Form_Trigger_Failure;
END IF;