进展4GL显示缓冲区锁型(Progress 4GL Display Buffer Lock Type

2019-10-21 02:30发布

我想问一下,如果有显示在消息框中我缓冲器的当前锁定类型的方式。 有没有办法做到这一点?

我只是想检查什么类型的锁有我在运行时间缓冲。

例如: MESSAGE STRING(myBuffer:LOCK-TYPE).
输出: NO-LOCK/SHARE-LOCK/EXCLUSIVE-LOCK

Answer 1:

不能直接使用。

您可以使用锁定(BufferName中)函数(或缓冲处理对象的相关属性),看它是否被锁定或没有,但你不能共享和独占这种方式区分。

真的应该足够了 - 如果没有,那么你锁定不引起其他人的任何问题。 如果它已被锁定,无论共享或独享,那么没有人可以将其锁定。 这是你的享受,如果您最初问它EXCLUSIVE-LOCK。 如果没有指定锁类型,或者如果你明确表示SHARE-LOCK,现在想升级你应该使用找到当前表EXCLUSIVE-LOCK锁。 如果你升级你有一个排它锁。 如果没有,那么这是不是NO-LOCK或SHARE-LOCK(你会知道从前面的测试)。

从理论上讲,你或许能在其中扫描_LOCK VST和分析信息,但是这是一个简单的函数,可能满足词“只是”陈述的要求还很远:)

这也是非常危险的 - 该_LOCK VST是挥发性(条目来来去去的速度比它们可以被读取),这是很容易写,似乎在开发工作的代码但嚼了生产的情况下大量的CPU时间。 不要尝试。 它不会有好下场。

如果你坚持不理我从像这样创建快照至少工作:

define variable i as integer no-undo.

define temp-table tt_lock no-undo like _lock
  index id-idx is unique primary _lock-id
  index recid-idx _lock-recid
  index usr-idx _lock-usr
  index tbl-idx _lock-table
.

empty temp-table tt_lock.

for each _lock while _lock._lock-usr <> ?:

  i = i + 1.
  if i > 10000 then leave.

  create tt_lock.
  buffer-copy _lock to tt_lock no-error.

end.

请注意,在使用的同时为循环。 如果你不理我,试试这个方法,我劝你尝试。 你会发现,虽然是比什么都快得多与WHERE条件,您就可以做。

在“如果我> 10000然后离开。” 是州长。 你应该在toucjes _LOCK任何代码类似的东西。 它可以防止其意外事情PROD系统疯狂大锁表。

不管你多么想你想做到这一点,你犯了一个错误。 请不要去那里。 实验,如果你想了解的问题,或者你正在寻找在你的开发环境中的问题,但请不要在生产把这种代码。



文章来源: Progress 4GL Display Buffer Lock Type