我在Oracle APEX应用程序中有一个Master Detail表单。当我尝试更新此表单中的数据时,我收到以下错误。
自用户启动更新过程以来,数据库中的当前数据版本已更改。当前行版本标识符=“26D0923D8A5144D6F483C2B9815D07D3”应用程序行版本标识符=“1749BCD159359424E1EE00AC1C3E3FCB”(第1行)
我已清除浏览器缓存并尝试更新。但它没有奏效。
我怎么解决这个问题?
投票
我遇到类似的问题,我的详细记录集有时间戳字段。默认情况下,主详细信息向导会将时间戳字段创建为日期选择器类型字段。如果您在这些上设置日期格式,则可以解决问题。
投票
这篇博文试图在表格形式上解决这个问题(我知道这不是最初的问题,但认为它可能是相关的)。它跟@sangam的说法一样。
简短版本:如果您有更新的字段是timestamp数据类型,则应设置日期/时间格式。
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,则Save操作会抛出错误消息,但name_preferred为null。我意识到初始校验和是基于name_calced计算的,但更新前的校验和是基于name_preferred的,因此应用程序认为有人在后台更改了值并显示了错误消息。
我不明白的是,这个问题在过去的3年里没有出现,应用程序一直在生产中运行!
我的解决方案是仅在name_preferred上创建字段源,这立即解决了这个问题。我还认为后端进程也会更改为从name_calced预先填充该表字段,因此用户始终可以看到基值(如果有)。
投票
我自己就是这个问题。现在,我意识到表格形式目前已被弃用,但我有一个事先开发并仍然使用它们的应用程序。这个问题发生了,我不得不在甲骨文得到我们的一把大枪来帮助我。我做了大量的数据库工作和大量的Apex开发,但我更像是Java,WebLogic等人,我真的无法想象这一点。
就我而言,事实证明它非常简单。表格形式中的一列是隐藏字段,通过子查询生成。由于隐藏,此列不可由用户编辑,不应成为MRU更新的一部分。我将字段设置为“隐藏列(保存状态)”并将其类型设置为“隐藏列”修复了问题。因此,这会导致子查询以在更改提交(保存)之前更改整个查询的校验和的方式执行,从而导致错误。
对于那些继续对此进行问题排查的人,请查看您指定的每个字段的查询,并注意表格形式中哪些列可编辑。应以某种方式设置所有其他字段,使其不是保存状态,以便它们不是更新的一部分。
投票
当我在提交时处理两个更新进程时出现此错误。
我的解决方案是为两个处理步骤添加一个条件。当我为Button A做了一个额外的过程时,我忘了这样做,但我从来没有更新Button B来限制它的行为。
导航:处理 - >进程 - > [您的进程名称] - >服务器端条件 - >按下按钮时= [您的按钮名称]
投票
我注意到当我使用Tabular Form并禁用其中一个表单操作时,即通过将服务器端条件设置为“Never”进行添加,应用更改(提交)按钮时出现此错误
当我恢复到原始状态时,它按预期工作。
如果您必须隐藏“添加/更新”按钮,请使用其他选项。
https://compknowledgebase.blogspot.com/2018/12/oracle-apex-error-current-version-of.html