我想问一下,如果有显示在消息框中我缓冲器的当前锁定类型的方式。 有没有办法做到这一点?
我只是想检查什么类型的锁有我在运行时间缓冲。
例如: MESSAGE STRING(myBuffer:LOCK-TYPE).
输出: NO-LOCK/SHARE-LOCK/EXCLUSIVE-LOCK
我想问一下,如果有显示在消息框中我缓冲器的当前锁定类型的方式。 有没有办法做到这一点?
我只是想检查什么类型的锁有我在运行时间缓冲。
例如: MESSAGE STRING(myBuffer:LOCK-TYPE).
输出: NO-LOCK/SHARE-LOCK/EXCLUSIVE-LOCK
不能直接使用。
您可以使用锁定(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系统疯狂大锁表。
不管你多么想你想做到这一点,你犯了一个错误。 请不要去那里。 实验,如果你想了解的问题,或者你正在寻找在你的开发环境中的问题,但请不要在生产把这种代码。