自用户启动更新过程以来,数据库中数据的当前版本已发生更改



我的Oracle APEX应用程序中有一个Master Detail表单。当我尝试更新此表单中的数据时,我得到了以下错误。

自用户启动以来,数据库中数据的当前版本已更改更新过程。当前行版本标识符="26D0923D8A5144D6F483C2B9815D07D3"应用程序行版本标识符="1749BCD159359424E1EE00AC1C3E3FCB"(第1行)

我已清除浏览器缓存并尝试更新。但它没有奏效。

我该如何解决这个问题?

我也遇到过类似的问题,我的详细记录集有时间戳字段。默认情况下,主详细信息向导会将时间戳字段创建为日期选择器类型字段。如果你在上面设置日期格式,就会解决这个问题。

这篇博客文章试图在表格形式上解决这个问题(我知道这不是最初的问题,但我认为它可能相关)。上面写的和@sangam下面写的一样。

短版本:如果您有一个时间戳数据类型的更新字段,则应该设置日期/时间格式。

http://apexbyg.blogspot.com/2015/05/tabular-form-bug.html

我的表格表单有一个时间戳数据类型的字段,但我已经设置了日期格式,所以这对我没有帮助。

如果由于查询中的设计缺陷,原始校验和的计算数据与更新前的校验和计算数据确实不同,则会出现这种情况!

在我的应用程序中,其中一个可更新字段的源是COALESCE(name_calced, name_preferred)。在源表中,人员的姓名可能已经由外部进程加载到记录中,我们将其保存到一个字段中-name_calced。但是最终用户可以输入一个首选名称,我们希望将其保存到name_preferred字段中。我们最初想用name_calced(如果存在)填充显示的、可更新的表格表单字段,或者如果用户已经提供了首选名称,则用name_preferred填充。然后他们可以更改该值并将其保存回数据库。

我最终发现,如果name_calced为非null,但name_preferred为null,则Save操作会抛出错误消息。我意识到初始校验和是根据name_calced计算的,但更新前的校验和是基于name _preferred,因此应用程序认为有人在后台更改了值,并显示了错误消息。

我不明白的是在过去的3年里,这个问题怎么没有出现——应用程序一直在生产中运行!

我的解决方案是使字段源仅位于name_preferred上,这立即解决了此问题。我还认为,后端流程也将被更改为从name_calced中预先填充该表字段,因此用户始终可以看到基值(如果有)。

我自己刚刚遇到这个问题。现在,我意识到现在不赞成使用表格形式,但我有一个预先开发的应用程序,现在仍在使用它们。这个问题发生了,我不得不让甲骨文公司的一位大人物来帮助我。我做了很多DB工作和相当多的Apex开发,但我更像是一个Java、WebLogic等的人,我真的无法理解这一点。

就我而言,事实证明这真的很简单。我的表格表单中有一列是通过子查询生成的隐藏字段。由于隐藏,此列不可由用户编辑,因此不应成为MRU更新的一部分。我将字段设置为"隐藏列(保存状态)",并将其类型设置为"隐列"解决了这个问题。因此,这导致子查询的执行方式是在点击提交(保存)之前更改整个查询的校验和,从而导致错误。

对于那些正在继续解决此问题的人,请查看您指定的每个字段的查询,并注意哪些列在表格形式中是可编辑的。所有其他字段的设置方式应使它们不保存状态,这样它们就不属于更新的一部分。

当我在提交时处理两个更新过程时,我遇到了这个错误。

我的解决方案是在两个处理步骤中都添加一个条件。当我为按钮A做了一个额外的过程时,我忘记了做这件事,但我从未更新按钮B来限制它的行为。

导航:处理->进程->[您的进程名称]->服务器端条件->按下按钮时=[您的按钮名称]

在我的例子中,我有一个来自辅助表的列没有设置为"仅查询",正在更新!尝试保存不在正在更新的表中的列时会发生错误。我花了半天的时间才弄清楚(列名是一样的)。

将链接列设置为隐藏,仅在表单中显示。

设置";在页面上发送提交";设置为"否"或禁用作为主键的链接列(Rownum/rowid/id等)。

希望对你有用。

我注意到这个错误发生在我处理表格表单时,并禁用了其中一项表单操作,即通过将服务器端条件设置为"从不"来添加、应用更改(提交)按钮

当我恢复到原来的状态时,它如预期的那样工作。

如果您必须隐藏"添加/更新"按钮,请使用其他选项。

https://compknowledgebase.blogspot.com/2018/12/oracle-apex-error-current-version-of.html

最新更新