点击或拖拽改变大小

Functions.DbRLock 方法

X#
在共享数据库文件中锁定记录,可选择保留先前的记录锁定。

命名空间:  XSharp.RT
程序集:  XSharp.RT (在 XSharp.RT.dll 中) 版本:2.22 GA
语法
 FUNCTION DbRLock(
	uRecId
) AS USUAL CLIPPER
查看代码

参数

uRecId (Optional)
类型:__Usual
要锁定的记录的ID(通常是记录号)。
如果指定,当前进程持有的记录锁将被保留。
如果未指定,当前进程持有的所有锁将被释放,并假定为当前记录。

返回值

类型:__Usual
如果获得记录锁定则返回TRUE;否则返回FALSE。
在空数据库中尝试锁定记录将返回TRUE。
备注
如果数据库文件以共享模式打开,在尝试任何写入数据库文件的操作之前,必须获得记录锁定。 对于每次调用DBRLock(),都会尝试一次锁定目标记录,并将结果作为逻辑值返回。
如果另一个进程当前持有目标记录的文件锁或记录锁,则尝试获取记录锁将失败。 如果DBRLock()成功,记录将被锁定,其他进程将被阻止更新该记录,直到锁被释放。DBRLock()提供共享锁,允许其他用户对锁定的记录进行只读访问,同时只允许当前进程修改它。 记录锁将一直有效,直到您显式解锁它(例如,使用DBUnLock()),关闭数据库文件,或尝试另一个文件或记录锁(使用RLock()或不带参数的DBRLock())。当指定参数时,DBRLock()不会释放当前进程持有的记录锁。相反,它会将新锁定的记录添加到锁定列表中(参见DBRLockList())。 默认情况下,此函数在当前选定的工作区上操作。
可以通过在别名表达式中指定来使其在未选定的工作区上操作。
这个特性很有用,因为DBRLock()不会自动尝试为相关文件锁定记录。
示例
这个例子使用DBRLock()从共享数据库文件中删除一条记录:
X#
 1USE customer INDEX custname SHARED NEW
 2SEEK "Smith"
 3IF Found()
 4    IF Customer->DBRLock()
 5        DELETE
 6        QOut("Smith已删除")
 7    ELSE
 8        QOut("记录正被其他用户使用")
 9    ENDIF
10ELSE
11    QOut("Smith不在客户文件中")
12ENDIF
13CLOSE
这个例子将DBRLock()指定为别名表达式,以锁定未选择的工作区中的记录:
X#
1USE sales SHARED NEW
2USE customer SHARED NEW
3IF !Sales->DBRLock()
4    QOut("当前销售记录正在使用中")
5ENDIF
参见