FLOCK() 函 数
锁定当前表或指定表
语 法
FLOCK([ n W orkArea | cTableAlias ])
返 值 类 型逻辑值 参 数 描 述
n W o rkArea
指定表所在的工作区 FLOCK() 函数对此表进行锁定
如果指定工作区没有打开的表 FLOCK() 函数的返回值为 假 (.F.)
cTableAlias
指定待锁定表的别名
如果指定的表别名不存在 Visual FoxPro 将产生错误信息
说 明
如果成功锁定该表 FLOCK() 函数返回 真 (.T.) 而当该表或表中的某个记录已经被另一用户锁定 FLOCK() 函数返回 假 (.F.)
如果省略可选参数 FLOCK() 函数对当前选定工作区中的已打开表进行锁定
如果 FLOCK() 函数锁定表的操作失败 返回 假 (.F.) 但并不产生错误信息 因此 FLOCK() 函数不触发 ON ERROR 例程
当某个表被锁定时 对表加锁的用户可以对此表进行读和写访问 网络上的其他用户则只能对此表进行只读访问
对于锁定的表 只有加锁的用户才能解锁 可以通过执行 UNLOCK 命令 关闭该表或退出 Visual FoxPro 来解开被锁定的表 使用 USE CLEAR ALL 或 CLOSE DATABASES 命令可以关闭表
默认情况下 FLOCK() 函数对一个表只进行一次锁定尝试 使用 SET REPROCESS 可以在第一次尝试失败后自动重试对表的锁定操作 SET REPROCESS 可以给定尝试加锁的次数 也可以给定在初次锁定操作不成功时 加锁尝试持续的时间
可以用 SET RELATION 命令在两个或更多的表之间建立关系 如果某个表与一个或多个表相关 则在此表上设置文件锁定并不会引起在相关表上设置文件锁定 必须在相关表上明确设置文件锁或移去文件锁
有关网络上表的记录和文件的锁定和共享的其他内容 请参阅 Microsoft Visual
FoxPro 6.0 中文版程序员指南 第十七章 共享访问程序设计
示 例
CLOSE DATABASES
OPEN DATABASE (HOME(2) + 'Data\testdata') USE products && 打开 products 表
SET REPROCESS TO 3 SECONDS
SELECT * FROM products INTO TABLE newprods
IF FLOCK()
*** 新产品初始化 ***
REPLACE ALL in_stock WITH 0.00 REPLACE ALL on_order WITH 0.00
WAIT 'Initialization Complete' WINDOW NOWAIT ELSE
*** 提醒用户文件被锁 ***
WAIT WINDOW 'Unable to open products file; try again later!' NOWAIT ENDIF
BROWSE FIELDS in_stock, on_order && 显示 newprods 表
USE
ERASE newprods.dbf
请 参 阅
LOCK(), RLOCK(), SET REPROCESS, SET RELATION, UNLOCK, USE, SET EXCLUSIVE