Oracle 形式的 FRM-40501

FRM-40501 in oracle forms

从子句查询我提出了一个查询以从两个表中获取数据检查代码

select empno,ename,job,mgr,hiredate,sal,comm,deptno,grade gr 
  from emp 
  left outer join salgrade on ( emp.sal between losal and hisal)

我也像代码一样将属性更改为可见和不可见

if   get_item_property('text_item17', visible) = 'TRUE' then
     set_item_property('text_item17', visible, property_false);  
else
     set_item_property('text_item17', visible, property_true);
     set_item_property('text_item17',enabled,property_true);
     set_item_property('text_item17',enabled,property_true);
     set_item_property('text_item17',NAVIGABLE ,property_true);
     set_item_property('text_item17',UPDATE_ALLOWED,property_true);
     set_item_property('text_item17',QUERYABLE,property_true);
     set_item_property('text_item17',UPDATE_NULL,property_true);
end if;

当我 运行 表单时,我收到无法更新数据的错误

Forms 不知道这些列属于哪个 table,因此无法执行更新。

我建议您创建一个视图,该视图的基础数据块,创建一个 INSTEAD OF 触发器,它可以处理从两个 table 中正确插入、更新和删除行的问题。

SET_ITEM_PROPERTY 您发布的电话与此无关(即不会解决您的问题)。

[编辑]

说你想不看就解决,我建议你不要花太多时间在这上面。如果您打开联机表单帮助并搜索 "Guidelines for choosing block data sources",您将看到 FROM 子句 作为数据源允许查询,但 NOT 允许 DML(插入、更新和删除)。

从 dml 数据目标类型中选择 table 并输入 table 名称然后转到项目 text_item17 属性仅将查询更改为 yes