Oracle 表单:将项目回滚到数据库值而不更改表单
Posted
技术标签:
【中文标题】Oracle 表单:将项目回滚到数据库值而不更改表单【英文标题】:Oracle forms: Rollback an item to database value without changing form 【发布时间】:2017-10-18 08:39:33 【问题描述】:假设如果满足某些条件,则应该不可能对我的整个块进行任何更改。我找到了一个简单的方法来做到这一点:
在块级的“WHEN-VALIDATE-ITEM”触发器中,我写了这个语句:
begin
if (-- custom statement --
and :system.record_status <> 'QUERY'
and get_item_property(:system.current_item,DATABASE_VALUE) <> name_in(:system.current_item)) then
msgbox('Can''t change');
copy(get_item_property(:system.current_item,DATABASE_VALUE), :system.current_item);
raise form_trigger_failure;
end if;
end;
复制语句将项目值设置回数据库值。但问题是,我的表单状态将变为“已更改”,而实际上并没有真正可见的更改,因为该项目已回滚到数据库值。因此,当我尝试退出表单时,系统会询问我是否要保存更改。我不希望这种情况发生。我该如何更改?
【问题讨论】:
当条件满足时,你为什么还要将copy(get_item_property(:system.current_item,DATABASE_VALUE), :system.current_item);
放入 if 语句中。把它放在else
块中,这样copy
的动作只有在有一些变化时才会发生\
【参考方案1】:
为避免询问用户是否要保存值,您可以执行 Key-Commit
BEGIN
EXECUTE_TRIGGER('KEY-COMMIT');
standard.commit;
END;
【讨论】:
以上是关于Oracle 表单:将项目回滚到数据库值而不更改表单的主要内容,如果未能解决你的问题,请参考以下文章
oracle 如何查询过去某个时间点的记录(应用于某个时间点的误操作,回滚到之前的操作)