VALIDATE语句导致一个值不会被存储在数据库中

问题描述:

我一直在处理一个问题,最近卡住了。一个特定的程序(一个编译后的.p)有代码编写,试图将值保存到数据库中的特定字段。VALIDATE语句导致一个值不会被存储在数据库中

在此表下有一个VAILDATE语句。这导致该值在执行更新操作时恢复。我在VALIDATE之前和之后发送消息,并且可以在VALIDATE之前看到更新的值,并在VALIDATE之后恢复。请有人可以帮我解决这个问题。提前谢谢了。

+1

这将有助于显示VALIDATE语句 –

+1

另外要注意的是,'validate'将调用创建或写入触发器,如果​​您有任何定义的t能够看看那里发生了什么。 – xander

从文档:

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

所以,如果你的更新VALIDATE后恢复就意味着至少一个的申请值不按限制。查看您的表格架构和字段值。检查他们是否可以。您的问题不清楚您是否有权访问代码。如果您有权访问该代码并且如果VALIDATE语句具有无错误,请尝试删除无错误。如果你删除了NO-ERROR,你可以看到错误信息,它可能有一些线索。

+0

谢谢奥斯汀。我有权访问代码,并且没有错误。我仍然看不到任何错误。尝试错误:状态错误,但仍然没有erros显示。这对我来说很奇怪。 –

我的确模拟了你的问题。 最有可能的是,分配违反了索引以及更改您正在监视的字段的值。当OE解析VALIDATE并且不通过时,整个事务失败。然后将记录恢复(回滚)到最后一个有效值,以及旧值到您正在查看的字段。据我所知,这是预期的。

要解决这种行为,我相信你应该

一)重写块只改变独特的领域(虽然这并不能真正解决问题后验证记录。它只是把你从做业务稍后将被撤销);或

b)将旧值保存到临时表记录,并在VALIDATE失败时仍然需要时复制它们。

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

感谢您的帮助。我很感谢能成为这样一个伟大社区的一部分。

我现在发现是什么导致了这一点。文件“https://documentation.progress.com/output/ua/OpenEdge_latest/index.html#page/dvref/validate-statement.html”最后有答案。我不知道VALIDATE语句的这种行为。

再次感谢所有。

+0

对于这个谁不在乎追逐链接......最后一点是什么? –

+0

嗨汤姆,我很新成为一名成员的*。我加入的一个理由是,我是你的职位的忠实粉丝。我没有按照一些程序,然后请让我知道,我会遵循。 –

+0

编辑你的答案并告诉我们导致你的问题的“最后一点”是什么。很多人没有跟着一个链接,通过长文档阅读并砌出你在想什么“最后点”是再弄清楚它是否适用于他们的情况的时间和精力。除非有人专门寻找链接,否则该链接应被视为支持脚注 - 不是实际的答案。答案应该是独立的,不要求读者继续挖掘。恕我直言。 –

好的。所以,问题是“VALIDATE语句一个.P文件,是导致价值rolledback的根本原因是按下面的链接中提到的最后一点:

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

导火索之一有一个代码,有意回滚值。

正如上面提到的,原因是VALIDATE语句大火把所有的相关的触发器。