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 表单:将项目回滚到数据库值而不更改表单的主要内容,如果未能解决你的问题,请参考以下文章

sqlserver回滚到前一小时

oracle 如何查询过去某个时间点的记录(应用于某个时间点的误操作,回滚到之前的操作)

如何回滚到以前的迁移并删除架构中的表和列?

将表单的所有输入重置为默认值而不重新加载

如何在javascript中获取django表单值而不将其保存到模型中

如何将新的 xcode 项目回滚到以前的项目?