【问题标题】:How can I delete a record in a table, based on dynamic queries?如何根据动态查询删除表中的记录?
【发布时间】:2021-06-03 22:25:14
【问题描述】:

这个问题是this one的后续问题。

我目前有以下源代码:

    CREATE BUFFER h-Table1 FOR TABLE "Table1" NO-ERROR.
    IF VALID-HANDLE(h-Table1)
    THEN DO:
             L-Found = h-Table1:FIND-FIRST("WHERE ...
             IF L-Found
             THEN h-Table1:BUFFER-DELETE().

当我启动 BUFFER-DELETE() 命令时,出现错误 335 (The Table1 record has NO-LOCK status. DELETE not allowed. (335))。我需要如何更改我的源代码才能使其正常工作? (如何更改 Table1 记录的状态?)

【问题讨论】:

  • 您可能需要阅读有关缓冲区句柄 docs.progress.com/bundle/openedge-abl-reference-117/page/… 的文档,并从那里了解您正在使用的方法。
  • @StefanDrissen:虽然您对文档的引用是正确的,但我必须说文档非常有限:例如我们在那里处理的特殊情况,处理BUFFER-DELETE() 方法。我提到的问题,可以使用EXCLUSIVE-LOCK参数来处理,但是相应的文档(docs.progress.com/bundle/openedge-abl-reference-117/page/…)中都没有提到该参数和运行时错误。
  • 缓冲区句柄页面中可用的 find-first 方法描述了 FIND-FIRST 语法(谓词表达式 [ , lockmode[ , waitmode]] )

标签: openedge progress-4gl


【解决方案1】:
h-Table1:FIND-FIRST ("WHERE ....", EXCLUSIVE-LOCK) . 

或在第一次找到之后(应该使用显式 NO-LOCK 选项完成)

hTable1:FIND-CURRENT (EXCLUSIVE-LOCK) . 

【讨论】:

  • 自从我与 Progress 合作以来,您在网站上的声誉正在飙升,但老实说,这是您应得的!再次感谢您的快速回复。
猜你喜欢
  • 1970-01-01
  • 2022-01-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-17
  • 1970-01-01
  • 2016-05-20
  • 1970-01-01
相关资源
最近更新 更多