点击或拖拽改变大小

Functions.Lock 方法

X#
尝试锁定表中的一个或多个记录。

命名空间:  XSharp.VFP
程序集:  XSharp.VFP (在 XSharp.VFP.dll 中) 版本:2.22 GA
语法
 FUNCTION Lock(
	cRecordNumberList,
	uArea
) AS LOGIC CLIPPER
查看代码

参数

cRecordNumberList (Optional)
类型:__Usual
指定一个或多个记录号列表,用于尝试锁定多个记录。 必须启用 Set MultiLocks,并且必须包含要尝试放置多个记录锁的表的工作区或别名。 Lock() 尝试锁定您指定的所有记录。cRecordNumberList 中指定的记录号用逗号分隔。 例如,要尝试锁定表中的前四条记录,cRecordNumberList 必须包含 1,2,3,4。
您还可以通过将记录指针移动到要锁定的记录, 执行 Lock() 或 RLock(),然后对每个额外的记录重复这些步骤来锁定多个记录。
在 X# 中,您可以指定 0 作为记录号。指定 0 可以尝试锁定表头。
备注 备注:
尽量缩短表头锁定的时间,因为当表头被锁定时,其他用户无法向表中添加记录。
使用 UNLock RECORD 0、UNLock 或 UNLock ALL 释放表头锁。 如果 cRecordNumbers 中指定的所有记录都成功锁定,Lock() 返回 true (.T.)。 如果 cRecordNumbers 中指定的记录中有一个无法锁定,Lock() 返回 false (.F.),且不会锁定任何记录。 但是,任何现有的记录锁仍然保持不变。多重记录锁定是一个累加过程。
放置额外的记录锁不会释放其他记录上的锁。 每个工作区可以锁定的最大记录数约为 8,000。 锁定整个表总是比锁定少量记录更快。
uArea (Optional)
类型:__Usual
尝试锁定特定工作区中打开的表的当前记录。 uArea 指定工作区号和表别名。 如果不指定工作区或表别名,Lock() 尝试锁定当前工作区中表的当前记录。

返回值

类型:Boolean
逻辑型
备注
Lock() 与 RLock() 相同。
对显式锁定记录的更改在记录解锁或记录指针移动之前不会保存。
如果成功放置锁,Lock() 返回 true (.T.)。锁定的记录对放置锁的用户可进行读写访问; 对网络上的所有其他用户仅可进行只读访问。 执行 Lock() 不能保证记录锁一定会成功放置。 无法对已被其他用户锁定的记录或已被其他用户锁定的表中的记录放置记录锁。 如果由于任何原因无法放置记录锁,Lock() 返回 false (.F.)。
默认情况下,Lock() 只尝试一次锁定记录。使用 Set REPROCESS 可在首次尝试失败时自动重试记录锁定。 Set REPROCESS 决定在初始锁定尝试失败时进行锁定尝试的次数或持续时间。 有关更多信息,请参阅 Set REPROCESS。
Set MultiLocks 决定是否可以锁定表中的多个记录。如果 Set MultiLocks 为 OFF(默认值), 则只能锁定表中的单个记录。当 Set MultiLocks 为 ON 时,可以锁定表中的多个记录。 有关更多信息,请参阅 Set MultiLocks。

解锁记录 表记录只能由放置锁的用户解锁。 您可以通过发出 UNLock、关闭表或退出 X# 来释放记录锁。 UNLock 可用于释放当前工作区、特定工作区或所有工作区中的记录锁。 有关更多信息,请参阅 UNLock。
将 Set MultiLocks 从 ON 切换到 OFF 或从 OFF 切换到 ON 会隐式执行 UNLock ALL — 释放所有工作区中的所有记录锁。
可以使用 Use、Clear ALL 或 Close Databases 关闭表。
有关在网络上记录和文件锁定以及共享表的更多信息,请参阅"共享访问编程"。
示例
X#
 1Close Databases
 2Open Database (HOME(2) + 'data\testdata')
 3Set REPROCESS TO 3 AUTOMATIC
 4STORE '1,2,3,4' TO gcRecList
 5gcOldExc = Set('EXCLUSIVE')
 6Set EXCLUSIVE OFF
 7Select 0
 8Use employee  // 打开 Employee 表
 9Select 0
10Use customer  // 打开 Customer 表
11? Lock('1,2,3,4', 'customer')  // 锁定 customer 表中的前 4 条记录
12? RLock(gcRecList, 'employee')  // 锁定 employee 表中的前 4 条记录
13UNLock IN customer
14UNLock IN employee
15Set EXCLUSIVE &gcOldExc
参见