VALIDATE语句导致一个值不会被存储在数据库中
我一直在处理一个问题,最近卡住了。一个特定的程序(一个编译后的.p)有代码编写,试图将值保存到数据库中的特定字段。VALIDATE语句导致一个值不会被存储在数据库中
在此表下有一个VAILDATE语句。这导致该值在执行更新操作时恢复。我在VALIDATE之前和之后发送消息,并且可以在VALIDATE之前看到更新的值,并在VALIDATE之后恢复。请有人可以帮我解决这个问题。提前谢谢了。
从文档:
VALIDATE statement:
Verifies that a record complies with mandatory field and unique index definitions.
所以,如果你的更新VALIDATE后恢复就意味着至少一个的申请值不按限制。查看您的表格架构和字段值。检查他们是否可以。您的问题不清楚您是否有权访问代码。如果您有权访问该代码并且如果VALIDATE语句具有无错误,请尝试删除无错误。如果你删除了NO-ERROR,你可以看到错误信息,它可能有一些线索。
谢谢奥斯汀。我有权访问代码,并且没有错误。我仍然看不到任何错误。尝试错误:状态错误,但仍然没有erros显示。这对我来说很奇怪。 –
我的确模拟了你的问题。 最有可能的是,分配违反了索引以及更改您正在监视的字段的值。当OE解析VALIDATE并且不通过时,整个事务失败。然后将记录恢复(回滚)到最后一个有效值,以及旧值到您正在查看的字段。据我所知,这是预期的。
要解决这种行为,我相信你应该
一)重写块只改变独特的领域(虽然这并不能真正解决问题后验证记录。它只是把你从做业务稍后将被撤销);或
b)将旧值保存到临时表记录,并在VALIDATE失败时仍然需要时复制它们。
希望这给你一些想法,至少。
感谢您的帮助。我很感谢能成为这样一个伟大社区的一部分。
我现在发现是什么导致了这一点。文件“https://documentation.progress.com/output/ua/OpenEdge_latest/index.html#page/dvref/validate-statement.html”最后有答案。我不知道VALIDATE语句的这种行为。
再次感谢所有。
对于这个谁不在乎追逐链接......最后一点是什么? –
嗨汤姆,我很新成为一名成员的stackoverflow。我加入的一个理由是,我是你的职位的忠实粉丝。我没有按照一些程序,然后请让我知道,我会遵循。 –
编辑你的答案并告诉我们导致你的问题的“最后一点”是什么。很多人没有跟着一个链接,通过长文档阅读并砌出你在想什么“最后点”是再弄清楚它是否适用于他们的情况的时间和精力。除非有人专门寻找链接,否则该链接应被视为支持脚注 - 不是实际的答案。答案应该是独立的,不要求读者继续挖掘。恕我直言。 –
好的。所以,问题是“VALIDATE语句一个.P文件,是导致价值rolledback的根本原因是按下面的链接中提到的最后一点:
导火索之一有一个代码,有意回滚值。
正如上面提到的,原因是VALIDATE语句大火把所有的相关的触发器。
这将有助于显示VALIDATE语句 –
另外要注意的是,'validate'将调用创建或写入触发器,如果您有任何定义的t能够看看那里发生了什么。 – xander