【问题标题】:VALIDATE statement is causing a value not to be stored in the databaseVALIDATE 语句导致值未存储在数据库中
【发布时间】:2017-12-08 19:07:39
【问题描述】:

我最近一直在处理一个问题并陷入困境。特定程序(已编译的 .p)具有编写的代码,它试图将值保存到数据库中的特定字段。

在该表下方有一个 VAILDATE 语句。这会导致值在执行更新操作时恢复。我在 VALIDATE 之前和之后发送了消息,可以看到在 VALIDATE 之前更新的值并在 VALIDATE 之后恢复。请有人可以帮助我。非常感谢。

【问题讨论】:

  • 显示 VALIDATE 语句会很有帮助
  • 还要注意validate 将调用创建或写入触发器,如果​​您为该表定义了任何触发器,请查看其中发生的情况。

标签: openedge progress-4gl webspeed


【解决方案1】:

来自文档:

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

因此,如果您的 UPDATE 在 VALIDATE 之后被还原,则意味着至少有一个字段值不符合约束条件。查看您的表架构和字段值。检查它们是否正常。从您的问题中不清楚您是否可以访问代码。如果您有权访问代码并且 VALIDATE 语句有 NO-ERROR,请尝试删除 NO-ERROR。如果您删除 NO-ERROR,您会看到错误消息,其中可能包含一些线索。

【讨论】:

  • 谢谢奥斯汀。我可以访问代码并且没有错误。我仍然看不到任何错误。尝试了错误:状态错误,但仍然没有出现错误。这对我来说很奇怪。
【解决方案2】:

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

为了避免这种行为,我相信你应该

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

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

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

【讨论】:

    【解决方案3】:

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

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

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

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

    【讨论】:

      【解决方案4】:

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

      我现在找到了造成这种情况的原因。文档“https://documentation.progress.com/output/ua/OpenEdge_latest/index.html#page/dvref/validate-statement.html”在最后一点给出了答案。我不知道 VALIDATE 语句的这种行为。

      再次感谢大家。

      【讨论】:

      • 对于这个谁不关心追逐链接...最后一点是什么?
      • 嗨,Tom,我是 stackoverflow 的一员,我很新。我加入的原因之一是我非常喜欢你的帖子。我没有遵循某些流程,请告诉我,我会遵循。
      • 编辑您的答案并告诉我们导致您的问题的“最后一点”是什么。许多人没有时间和精力去关注一个链接,阅读一份长长的文件并弄清楚你认为“最后一点”是什么,然后弄清楚它是否适用于他们的情况。除非有人专门寻找链接,否则该链接应被视为支持脚注 - 而不是实际答案。答案应该是独立的,不需要读者继续挖掘。恕我直言。
      • 谢谢汤姆。我试图对此提供一个统一的答案。希望这更有意义,但如果您觉得可以做得更好,请提出建议。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-02-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-02-07
      相关资源
      最近更新 更多