尝试锁定表中一个或更多的记录。
语法
LOCK([nWorkArea | cTableAlias]
| [cRecordNumberList, nWorkArea | cTableAlias])
参数
nWorkArea | cTableAlias
尝试锁定指定工作区中打开的表的当前记录。nWorkArea 指定工作区号,cTableAlias 指定表别名。如果不指定工作区和表别名,lock( ) 函数尝试锁定当前工作区中的表的当前记录。
cRecordNumberList
指定尝试锁定多个记录时必须包含的一个或更多记录编号的列表。SET MULTILOCK 必须为 ON,并且必须要包含给多个记录加锁的工作区或表的别名。
lock( ) 函数尝试锁定您所指定的所有记录。
cRecordNumberList 指定的记录编号之间用逗号分隔。例如尝试给某表的前四个记录加锁时,cRecordNumberList 应为 1,2,3,4。
若要锁定多个记录,可以对其中的每一个记录重复下列步骤:移动记录指针指向要锁定的记录,再发出 LOCK( ) 或 RLOCK( ) 命令。
在 Visual FoxPro 中,可以将 0 指定为记录编号。指定 0 时试图锁定表头。
重要内容
锁定表头的时间应尽可能地短,因为表头锁定时其他用户不能向表中添加记录。
可以用 UNLOCK RECORD 0,UNLOCK 或 UNLOCK ALL 命令解除对表头的锁定。
如果在 cRecordNumbers 中指定的所有记录均锁定成功,lock( ) 函数返回“真”(.T.)。由 cRecordNumbers 指定的记录中即使有一个记录不能锁定,lock( ) 函数也将返回“假”(.F.),并且不锁定任何记录。不过,原来已有的记录锁仍保留原样。多个记录的锁定是个叠加过程。设置额外的记录锁并不释放对其他记录的锁定。
在一个工作区中可以锁定的最大记录数约为 8000,锁定整个表的速度总比只锁定一部分的记录要快。
解除对记录的锁定
只有设置锁的用户才能解除对表中记录的锁定。发出 UNLOCK 命令,关闭该表或退出 Visual FoxPro 都将解除记录锁。
UNLOCK 可以解除当前工作区、指定工作区或所有工作区中的记录锁。有关详细内容,请参阅
UNLOCK。
将 SET MULTILOCKS 的设置由 ON 切换为 OFF,或由 OFF 切换为 ON ,都将隐含地执行 UNLOCK ALL 命令,释放所有工作区中的全部记录锁。
可以使用 USE 命令、CLOSE ALL 命令或 CLOSE DATABASE 命令关闭表。
有关记录与文件锁定以及在网络上共享表的详细内容,请参阅《开发指南》第十九章“共享访问程序设计”。
返回值类型
逻辑型
说明
lock( ) 函数与 Rlock( ) 函数等价。
如果锁定成功,则 lock( ) 函数返回“真”(.T.)。设置锁的用户可对锁定记录进行读和写访问;网络上其他的用户只能对这些记录进行只读访问。
执行 lock( ) 函数并不保证记录锁设置成功。不能对已由另一用户锁定的记录或位于其他用户锁定的表中的记录设置记录锁。如果由于某种原因不能设置记录锁,LOCK( )
函数返回“假”(.F.)。
在默认情况下,lock( ) 函数尝试锁定记录一次。使用 SET REPROCESS 命令可以在第一次尝试失败后自动地重设记录锁。SET REPROCESS 确定初始锁定失败时锁定操作的尝试次数或尝试锁定应当持续的时间。有关详细内容,请参阅 SET REPROCESS。
SET MULTILOCKS 决定能否锁定表中的多个记录。如果 SET MULTILOCKS 为 OFF(默认值),只能锁定表中的单个记录。而 SET MULTILOCKS 为 ON 时,可以锁定表中的多个记录。有关详细内容,请参阅 SET MULTILOCKS
。