VALIDATE 语句导致值不存储在数据库中



我最近一直在处理一个问题,但卡住了。一个特定的程序(编译的.p(编写的代码是它试图将值保存到数据库中的特定字段的地方。

在此之下,该表上有一个VAILDATE声明。这会导致值在执行更新操作时还原。我在验证之前和之后发送消息,可以看到值在验证之前更新,并在验证后立即恢复。请有人帮我解决这个问题。提前非常感谢。

从文档中:

VALIDATE statement:
Verifies that a record complies with mandatory field and unique index definitions. 

因此,如果您的更新在验证后恢复,则意味着至少有一个提交的值不符合约束。查看表架构和字段值。检查它们是否正常。从您的问题中不清楚您是否可以访问代码。如果您有权访问代码,并且 VALIDATE 语句具有 NO-ERROR,请尝试删除 NO-ERROR。如果您删除NO-ERROR,则可以看到错误消息,并且其中可能有一些线索。

我确实模拟了你的问题。 最有可能的是,赋值会违反索引并更改您正在监视的字段的值。当 OE 解析验证并且未通过时,整个事务将失败。然后,记录将还原(回滚(到其最后一个有效值,以及您正在查看的字段的旧值。据我所知,这是意料之中的。

为了克服这种行为,我认为你应该

a( 重写块并在仅更改唯一字段后验证记录(尽管这并不能真正解决它。它只是使您免于执行稍后将撤消的操作(;或

b( 将旧值保存到临时表记录中,如果在 VALIDATE 失败时仍需要它们,请将它们复制回来。

希望这至少能给你一些想法。

好的。所以问题是"验证语句一个 .p 文件,导致值回滚。根本原因是根据以下链接中提到的最后一点:

https://documentation.progress.com/output/ua/OpenEdge_latest/index.html#page/dvref/validate-statement.html

其中一个触发器具有有意回滚值的代码。

如上所述,原因是 VALIDATE 语句触发了所有相关触发器。

感谢您的所有帮助。我很感激能成为这样一个伟大社区的一员。

我现在已经找到了导致这种情况的原因。文档"https://documentation.progress.com/output/ua/OpenEdge_latest/index.html#page/dvref/validate-statement.html"在最后一点中有答案。我不知道验证语句的这种行为。

再次感谢大家。

相关内容

最新更新