RLOCK() 函 数

RLOCK() 函 数 - 图1尝试给一个或多个表记录加锁

语 法

RLOCK([ n W orkArea | cTableAlia s]

| [ cRecordNumberLis t , n W orkArea | cTableAlias ])

返 值 类 型

逻辑值

参 数 描 述

n W o rkArea | cTableAlias

RLOCK() 函 数 - 图2RLOCK() 函 数 - 图3指 定 表 所 在 的 工 作 区 编 号 或 表 别 名 如 果 不 指 定 工 作 区 或 别 名 则 RLOCK ( )

RLOCK() 函 数 - 图4试 图 对 当 前 选 定 工 作 区 中 表 的 当 前 记 录 加 锁

cRecordNumberList

RLOCK() 函 数 - 图5RLOCK() 函 数 - 图6RLOCK() 函 数 - 图7RLOCK() 函 数 - 图8RLOCK() 函 数 - 图9RLOCK() 函 数 - 图10RLOCK() 函 数 - 图11指 定 RLOCK ( ) 尝 试 锁 定 的 多 个 记 录 字 符 表 达 式 cRecordNumberList 指定 一 个 或 多 个 要 RLOCK( ) 尝 试 锁 定 的 记 录 的 编 号 多 个 记 录 的 编 号 之 间 用逗 号 隔 开 例 如 要 对 表 中 前 四 个 记 录 加 锁 cRecordNumberList 应 该 为 1

RLOCK() 函 数 - 图12RLOCK() 函 数 - 图13RLOCK() 函 数 - 图14RLOCK() 函 数 - 图152 3 4

RLOCK() 函 数 - 图16RLOCK() 函 数 - 图17RLOCK() 函 数 - 图18RLOCK() 函 数 - 图19RLOCK() 函 数 - 图20RLOCK() 函 数 - 图21RLOCK() 函 数 - 图22要锁定多个记录 SET MULTILOCKS 必须设置为 ON 并且必须指定表所在的工作区号 nWorkArea 或表的别名 cTableAlias

RLOCK() 函 数 - 图23RLOCK() 函 数 - 图24要锁定多个记录 可以将记录指针移动到要锁定的记录上 执行 RLOCK ( ) 或 LOCK( )

RLOCK() 函 数 - 图25RLOCK() 函 数 - 图26命令将这个记录锁定 然后多次重复这个过程

RLOCK() 函 数 - 图27RLOCK() 函 数 - 图28RLOCK() 函 数 - 图29在 Visual FoxPro 中 可以指定 0 作为记录编号 指 定 0 表示要锁定表头

RLOCK() 函 数 - 图30RLOCK() 函 数 - 图31RLOCK() 函 数 - 图32重 要 提 示 锁 定 表 头 的 时 间 要 尽 可 能 短 因 为 表 头 锁 定 期 间 其 他 用 户 不 能 向 表中 添 加 记 录

RLOCK() 函 数 - 图33RLOCK() 函 数 - 图34RLOCK() 函 数 - 图35RLOCK() 函 数 - 图36RLOCK() 函 数 - 图37对表头解锁可以用 UNLOCK RECORD 0 或 UNLOCK 或 UNLOCK ALL 等命令 如果成功地锁定了所有 cRecordNumberList 之中的记录 则 RLOCK( ) 返回 真 (.T.)

RLOCK() 函 数 - 图38RLOCK() 函 数 - 图39RLOCK() 函 数 - 图40RLOCK() 函 数 - 图41RLOCK() 函 数 - 图42RLOCK() 函 数 - 图43RLOCK() 函 数 - 图44RLOCK() 函 数 - 图45RLOCK() 函 数 - 图46如果 cRecordNumberList 指定的记录有一个或多个不能加锁 则 RLOCK( ) 返回 假(.F.) 并且对指定的任何记录都不加锁 以上两种情况中 原来已有的记录锁保持不变多个记录加锁是一个递增过程 即添加新的记录锁时并不释放原有的记录锁

RLOCK() 函 数 - 图47RLOCK() 函 数 - 图48出于运行效率方面考虑 锁定整个表一般比锁定部分记录 RLOCK() 函 数 - 图49 哪怕是很少几个 RLOCK() 函 数 - 图50 要快

RLOCK() 函 数 - 图51说 明

RLOCK ( ) 等同于

LOCK( )

如果加锁成功 则

RLOCK ( )

返回

(.T.)

此时

锁定的记录对于加锁的用户既

RLOCK() 函 数 - 图52RLOCK() 函 数 - 图53RLOCK() 函 数 - 图54RLOCK() 函 数 - 图55RLOCK() 函 数 - 图56RLOCK() 函 数 - 图57RLOCK() 函 数 - 图58可读也可写 而对于网络上的其他用户只读

RLOCK() 函 数 - 图59RLOCK() 函 数 - 图60RLOCK() 函 数 - 图61RLOCK() 函 数 - 图62RLOCK() 函 数 - 图63RLOCK() 函 数 - 图64RLOCK() 函 数 - 图65RLOCK() 函 数 - 图66RLOCK() 函 数 - 图67RLOCK() 函 数 - 图68执行 RLOCK ( ) 并不能保证每次加锁都成功 如果一个记录已由一个用户加锁 则其他用户不能对这个记录加锁 如果一个表已由一个用户加锁 则其他用户不能对这个表中的记录加锁 不管什么理由 只要记录不能加锁 RLOCK( ) 就返回 假 (.F.)

RLOCK() 函 数 - 图69RLOCK() 函 数 - 图70RLOCK() 函 数 - 图71RLOCK() 函 数 - 图72RLOCK() 函 数 - 图73RLOCK() 函 数 - 图74RLOCK() 函 数 - 图75默认情况下 RLOCK ( ) 给记录加锁时只尝试一次 要想在第一次加锁尝试失败后自动重试加锁过程 应使用 SET REPROCESS 命令 SET REPROCESS 可以在加锁不成功的情况下控制尝试加锁的次数或尝试加锁的时间长度 有 关 SET REPROCESS 和锁定表 的详细内容 请参阅稍后的 SET REPROCESS 命令

RLOCK() 函 数 - 图76RLOCK() 函 数 - 图77RLOCK() 函 数 - 图78RLOCK() 函 数 - 图79RLOCK() 函 数 - 图80RLOCK() 函 数 - 图81RLOCK() 函 数 - 图82RLOCK() 函 数 - 图83RLOCK() 函 数 - 图84SET MULTILOCKS 命令决定能否锁定表中的多个记录 如果 SET MULTILOCKS 设置为 OFF 默认情况 则只能锁定表中的单个记录 如果 SET MULTILOCKS 设置为 ON 则可以锁定表中的多个记录 详细内容 请参阅稍后的 SET MULTILOCKS 命 令

RLOCK() 函 数 - 图85RLOCK() 函 数 - 图86RLOCK() 函 数 - 图87已加锁的表记录只能由加锁的用户解锁 执行 UNLOCK 命令 关闭表或退出 Visual FoxPro 都可以对记录解锁

RLOCK() 函 数 - 图88RLOCK() 函 数 - 图89UNLOCK 命令可以用来解开当前工作区 指定工作区或所有工作区内的记录锁 有

RLOCK() 函 数 - 图90RLOCK() 函 数 - 图91关详细内容 请 参 阅 UNLOCK

RLOCK() 函 数 - 图92RLOCK() 函 数 - 图93RLOCK() 函 数 - 图94将 SET MULTILOCKS 的设置由 ON 切换为 OFF 或由 OFF 切换为 ON 时 都隐含执行了 UNLOCK ALL 命令 所有工作区内的所有记录锁都被解除

RLOCK() 函 数 - 图95RLOCK() 函 数 - 图96RLOCK() 函 数 - 图97要关闭表 可以使用 USE CLEAR ALL 或 CLOSE DATABASES 等命令

RLOCK() 函 数 - 图98RLOCK() 函 数 - 图99RLOCK() 函 数 - 图100RLOCK() 函 数 - 图101RLOCK() 函 数 - 图102RLOCK() 函 数 - 图103有关 网络中记录和文件锁定 共享表的 详细内容 请参阅 Microsoft Visual FoxPro 6.0 中文版程序员指南 RLOCK() 函 数 - 图104 的第 十七 章 共享访问程序设计

示 例

RLOCK() 函 数 - 图105下面的示例对 customer 和 employee 表中的前四个记录进行锁定和解锁

CLOSE DATABASES

OPEN DATABASE (HOME(2) + 'Data\testdata') SET REPROCESS TO 3 AUTOMATIC

STORE '1,2,3,4' TO gcRecList

gcOldExc = SET('EXCLUSIVE') SET EXCLUSIVE OFF SELECT 0

USE employee && 打开 Employee 表

SELECT 0

USE customer && 打开 Customer 表

? LOCK('1,2,3,4', 'customer') && 锁住 customer 表的前四个记录

? RLOCK ( gcRecList, 'employee') && 锁住 employee 表的前四个记录

UNLOCK IN customer UNLOCK IN employee

SET EXCLUSIVE &gcOldExc

请 参 阅

CLEA R , CLOSE , FLOCK ( ) , LOCK( ) , SET MULTILOCK S , SET RELATION ,

SET REPROCESS , UNLOCK , USE