rlock( ) 函数

示例 请参阅

尝试给一个或多个表记录加锁。

语法

RLOCK([nWorkArea | cTableAlias] 
| [cRecordNumberList, nWorkArea | cTableAlias])

参数
nWorkArea | cTableAlias

指定表所在的工作区编号或表别名。如果不指定工作区或别名,则 RLOCK ( ) 试图对当前选定工作区中表的当前记录加锁。

cRecordNumberList

指定 RLOCK ( ) 尝试锁定的多个记录。字符表达式 cRecordNumberList 指定一个或多个要 RLOCK( ) 尝试锁定的记录的编号,多个记录的编号之间用逗号隔开。例如,要对表中前四个记录加锁,cRecordNumberList 应该为 “1,2,3,4”。
要锁定多个记录,SET MULTILOCKS 必须设置为 ON,并且必须指定表所在的工作区号( nWorkArea )或表的别名( cTableAlias )。
要锁定多个记录,可以将记录指针移动到要锁定的记录上,执行 RLOCK( ) 或 LOCK( ) 命令将这个记录锁定,然后多次重复这个过程。

在 Visual FoxPro 中,可以指定 0 作为记录编号。指定 0 表示要锁定表头。

重要内容
锁定表头的时间要尽可能短。因为表头锁定期间,其他用户不能向表中添加记录。

对表头解锁可以用 UNLOCK RECORD 0 或 UNLOCK 或 UNLOCK ALL 等命令。
如果成功地锁定了所有 cRecordNumberList 之中的记录,则 RLOCK( ) 返回“真”(.T.) 。如果 cRecordNumberList 指定的记录有一个或多个不能加锁,则 RLOCK( ) 返回“假”(.F.),并且对指定的任何记录都不加锁。以上两种情况中,原来已有的记录锁保持不变。多个记录加锁是一个递增过程,即添加新的记录锁时并不释放原有的记录锁。
出于运行效率方面考虑,锁定整个表一般比锁定部分记录(哪怕是很少几个)要快。

返回值类型

逻辑型

说明

RLOCK( ) 等同于 LOCK( )。
如果加锁成功,则 RLOCK( ) 返回“真”(.T.)。此时,锁定的记录对于加锁的用户既可读也可写,而对于网络上的其他用户只读。
执行 RLOCK( ) 并不能保证每次加锁都成功。如果一个记录已由一个用户加锁,则其他用户不能对这个记录加锁;如果一个表已由一个用户加锁,则其他用户不能对这个表中的记录加锁。不管什么理由,只要记录不能加锁,RLOCK( ) 就返回“假”(.F.)。
默认情况下,RLOCK( ) 给记录加锁时只尝试一次。要想在第一次加锁尝试失败后自动重试加锁过程,应使用 SET REPROCESS 命令。SET REPROCESS 可以在加锁不成功的情况下控制尝试加锁的次数或尝试加锁的时间长度。有关 SET REPROCESS 和对表加锁的详细内容,请参阅 SET REPROCESS

SET MULTILOCKS 命令决定能否锁定表中的多个记录。如果 SET MULTILOCKS 设置为 OFF (默认情况),则只能锁定表中的单个记录。如果 SET MULTILOCKS 设置为 ON,则可以锁定表中的多个记录。有关详细内容,请参阅 SET MULTILOCKS
已加锁的表记录只能由加锁的用户解锁。执行 UNLOCK 命令、关闭表或退出 Visual FoxPro 都可以对记录解锁。
UNLOCK 命令可以用来解开当前工作区、指定工作区或所有工作区内的记录锁。有关详细内容,请参阅 UNLOCK
将 SET MULTILOCKS 的设置由 ON 切换为 OFF 或由 OFF 切换为 ON 时,都隐含执行了 UNLOCK ALL 命令,所有工作区内的所有记录锁都被解除。

要关闭表,可以使用 USE、CLEAR ALL 或 CLOSE DATABASES 等命令。
有关记录和文件加锁以及在网络上共享表的详细内容,请参阅《开发指南》第十九章“共享访问程序设计”。