FLOCK() 函 数

FLOCK() 函 数 - 图1锁定当前表或指定表

语 法

FLOCK([ n W orkArea | cTableAlias ])

返 值 类 型逻辑值 参 数 描 述

n W o rkArea

FLOCK() 函 数 - 图2FLOCK() 函 数 - 图3指定表所在的工作区 FLOCK() 函数对此表进行锁定

FLOCK() 函 数 - 图4FLOCK() 函 数 - 图5FLOCK() 函 数 - 图6如果指定工作区没有打开的表 FLOCK() 函数的返回值为 假 (.F.)

cTableAlias

FLOCK() 函 数 - 图7指定待锁定表的别名

FLOCK() 函 数 - 图8FLOCK() 函 数 - 图9如果指定的表别名不存在 Visual FoxPro 将产生错误信息

说 明

FLOCK() 函 数 - 图10FLOCK() 函 数 - 图11FLOCK() 函 数 - 图12FLOCK() 函 数 - 图13FLOCK() 函 数 - 图14FLOCK() 函 数 - 图15FLOCK() 函 数 - 图16FLOCK() 函 数 - 图17如果成功锁定该表 FLOCK() 函数返回 真 (.T.) 而当该表或表中的某个记录已经被另一用户锁定 FLOCK() 函数返回 假 (.F.)

FLOCK() 函 数 - 图18FLOCK() 函 数 - 图19如果省略可选参数 FLOCK() 函数对当前选定工作区中的已打开表进行锁定

FLOCK() 函 数 - 图20FLOCK() 函 数 - 图21FLOCK() 函 数 - 图22FLOCK() 函 数 - 图23FLOCK() 函 数 - 图24FLOCK() 函 数 - 图25FLOCK() 函 数 - 图26如果 FLOCK() 函数锁定表的操作失败 返回 假 (.F.) 但并不产生错误信息 因此 FLOCK() 函数不触发 ON ERROR 例程

FLOCK() 函 数 - 图27FLOCK() 函 数 - 图28FLOCK() 函 数 - 图29当某个表被锁定时 对表加锁的用户可以对此表进行读和写访问 网络上的其他用户则只能对此表进行只读访问

FLOCK() 函 数 - 图30FLOCK() 函 数 - 图31FLOCK() 函 数 - 图32FLOCK() 函 数 - 图33FLOCK() 函 数 - 图34FLOCK() 函 数 - 图35对于锁定的表 只有加锁的用户才能解锁 可以通过执行 UNLOCK 命令 关闭该表或退出 Visual FoxPro 来解开被锁定的表 使用 USE CLEAR ALL 或 CLOSE DATABASES 命令可以关闭表

FLOCK() 函 数 - 图36FLOCK() 函 数 - 图37FLOCK() 函 数 - 图38FLOCK() 函 数 - 图39FLOCK() 函 数 - 图40FLOCK() 函 数 - 图41默认情况下 FLOCK() 函数对一个表只进行一次锁定尝试 使用 SET REPROCESS 可以在第一次尝试失败后自动重试对表的锁定操作 SET REPROCESS 可以给定尝试加锁的次数 也可以给定在初次锁定操作不成功时 加锁尝试持续的时间

FLOCK() 函 数 - 图42FLOCK() 函 数 - 图43FLOCK() 函 数 - 图44FLOCK() 函 数 - 图45可以用 SET RELATION 命令在两个或更多的表之间建立关系 如果某个表与一个或多个表相关 则在此表上设置文件锁定并不会引起在相关表上设置文件锁定 必须在相关表上明确设置文件锁或移去文件锁

FLOCK() 函 数 - 图46FLOCK() 函 数 - 图47有关网络上表的记录和文件的锁定和共享的其他内容 请参阅 Microsoft Visual

FLOCK() 函 数 - 图48FLOCK() 函 数 - 图49FLOCK() 函 数 - 图50FLOCK() 函 数 - 图51FoxPro 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