
第十二章并发共享访问编程及其它 12.1多用户环境及多用户操作函数、命令 1.表文件加锁的函数FLOCK) 格式:FLOCK([]) 说明:该函数试图将当前或指定工作区的表文件锁定 (锁定全部记录)。如果加锁成功,返回.T(真),这 样可读写该表,其它用户只能读不能写。如果加锁 不成功,则返回F.(假),表示这个表或表中的一个 记录早已被其它用户锁定了。函数返回类型逻辑型。 用户可以根据情况用UNLOCK、USE、CLEAR ALL 或者CLOSE DATABASE等命令来关闭表
第十二章 并发共享访问编程及其它 12.1 多用户环境及多用户操作函数、命令 1.表文件加锁的函数FLOCK() 格式:FLOCK([]) 说明:该函数试图将当前或指定工作区的表文件锁定 (锁定全部记录)。如果加锁成功,返回.T.(真),这 样可读写该表,其它用户只能读不能写。如果加锁 不成功,则返回.F.(假),表示这个表或表中的一个 记录早已被其它用户锁定了。函数返回类型逻辑型。 用户可以根据情况用UNLOCK、USE、CLEAR ALL 或者CLOSE DATABASE等命令来关闭表

表记录加锁的函数RLOCK) 格式:RLOCK[]I[,[][,]) 说明:VFP的RLOCK)函数可锁定多个记录。 其中[]任选项指定一个或者多 个记录号,并用逗号将它们分开,这样 RLOCK()函数将试着给这几个记录加锁。例 如,要给表中的前5个记录加锁,就必须含有1,2,3,4,5。[]不选,只给当前记录加锁
2.表记录加锁的函数RLOCK() 格式:RLOCK([]|[,[][,]]) 说明:VFP的RLOCK()函数可锁定多个记录。 其中[]任选项指定一个或者多 个记录号,并用逗号将它们分开,这样 RLOCK()函数将试着给这几个记录加锁。例 如,要给表中的前5个记录加锁,就必须含有1,2,3,4,5。[]不选,只给当前记录加锁

检测ON ERROR语句捕捉的出错号 ERROR()的函数 格式:ERROR() 说明:ERROR(O返回最近的一个错误号。 在ON ERROR命令被激活的情况下, RROR(Q返回一个非0值。,函数返回类型 数值型。 当程序执行时遇到了错误(如隐 含加锁失败等),可用ON ERROR程序中 的ERROR()函数查明错误的类型,用 MESSAGE)函数可返同相应的错误信息。 ERROR(O返▣值可用RETURN.或RETRY 来复位,复位为0
3.检测ON ERROR语句捕捉的出错号 ERROR()的函数 格式:ERROR() 说明:ERROR()返回最近的一个错误号。 在ON ERROR命令被激活的情况下, ERROR()返回一个非0值。函数返回类型 数值型。当程序执行时遇到了错误(如隐 含加锁失败等),可用ON ERROR 程序中 的ERROR()函数查明错误的类型,用 MESSAGE()函数可返回相应的错误信息。 ERROR()返回值可用RETURN或RETRY 来复位,复位为0

检测ON ERROR语句捕捉的出错号对应的出错 信息的函数MESSAGE() 格式:MESSAGE([1]) 说明:此函数功能是:以字符串的形式返回当前的 错误信息。任选项[1],表示可返回引起错误的源 程序命令行内容。如果此程序代码不能用,则 MESSAGE(1)将返回以下几种形式之 一。 (1)如果此行是宏替换的,返回整个程序行。 (2)如果此行包含的命令没有任何附加的子句时, 返回此命令。 (3)如果此行包含有命令和附加的子句时,将返回 此命令和后面三个小点(…)
4.检测 ON ERROR语句捕捉的出错号对应的出错 信息的函数MESSAGE() 格式:MESSAGE([1]) 说明:此函数功能是:以字符串的形式返回当前的 错误信息。任选项[1],表示可返回引起错误的源 程序命令行内容。如果此程序代码不能用,则 MESSAGE(1)将返回以下几种形式之一。 (1)如果此行是宏替换的,返回整个程序行。 (2)如果此行包含的命令没有任何附加的子句时, 返回此命令。 (3)如果此行包含有命令和附加的子句时,将返回 此命令和后面三个小点(…)

12.2使用数据工作期 12.2.1使用私有数据工作期 如果想更多地控制表单的多个实例,可以使用私 有数琚工作期。当表单使用私有数据工作期时, 命为应用程序创建的表单、表单集或工真栏 中的每个实例创建二个新的数据工作期。每个 私有数据工作期包括: (1)表单的数据环境中每个表、索引和关系的独 立备份。 (2)数目不限的工作区。 (3)独立于表单基表的每个备份表的记录指针
12.2 使用数据工作期 12.2.1 使用私有数据工作期 如果想更多地控制表单的多个实例,可以使用私 有数据工作期。当表单使用私有数据工作期时, VFP为应用程序创建的表单、表单集或工具栏 中的每个实例创建一个新的数据工作期。每个 私有数据工作期包括: (1)表单的数据环境中每个表、索引和关系的独 立备份。 (2)数目不限的工作区。 (3)独立于表单基表的每个备份表的记录指针

12.2.2识别数据工作期 每个私有数据工作期是单独识别的。可以在 “数据工作期”窗口中查看每个数据工作 期的内容。也可以通过在Load事件代码中 的命令改变数据工作期的说明。 使用DataSessionID的运行时属性,可以查 看每个数据工作期限的识别号。下面的示 例显示名为frmMyForm的表单的 DataSessionID属性。 12.2.3使用多个表单实例更新数据
12.2.2 识别数据工作期 每个私有数据工作期是单独识别的。可以在 “数据工作期”窗口中查看每个数据工作 期的内容。也可以通过在Load事件代码中 的命令改变数据工作期的说明。 使用DataSessionID的运行时属性,可以查 看每个数据工作期限的识别号。下面的示 例显示名为frmMyForm的表单的 DataSessionID属性。 12.2.3 使用多个表单实例更新数据

12.3用缓冲(Buffering)访问共享数据 123.1缓冲编辑结果 选择缓冲方法 VFP有两种类型的缓冲:记录缓冲和表缓冲。 (1)若一次只对一个记录进行访问、修改或写操作, 一般应选择记录缓冲。,在多用户环境中,记录缓冲 能够提供适当的有效检查机制,对萁它用卢所做的 数据更新操作影响最少。 (2)若要对多个记录(一个表中处理多个记录或在一对 多关系中处理子记录)的更新使用缓冲,应选择表缓 冲。 (3)若要对已有数据提供最大程度的保护可使用VFP事 可以单独使用事务,但是如果将事务和记录缓 希或表缓种希零甲是餐用,会获得量好的效菓
12.3 用缓冲(Buffering)访问共享数据 12.3.1 缓冲编辑结果 1.选择缓冲方法 VFP有两种类型的缓冲:记录缓冲和表缓冲。 (1)若一次只对一个记录进行访问、修改或写操作, 一般应选择记录缓冲。在多用户环境中,记录缓冲 能够提供适当的有效检查机制,对其它用户所做的 数据更新操作影响最少。 (2)若要对多个记录(一个表中处理多个记录或在一对 多关系中处理子记录)的更新使用缓冲,应选择表缓 冲。 (3)若要对已有数据提供最大程度的保护可使用VFP事 务。可以单独使用事务,但是如果将事务和记录缓 冲或表缓冲命令一起使用,会获得更好的效果

2.选择锁定方式 VP有两种锁定方式提供缓冲:保守式和开放式。 在多用户环境中,保守式缓冲能防止其他用户在对某 一 特定记录或表正进行修改时访问它。保守式缓冲 为单个记录的修改提供最安全的工作环境,但是会 降低用户的操作速度。 开放式缓冲是更新记录的有效方法,因为锁定只在写 记录时生效,这样在一个远程表上使用记录或表缓 冲时,VFP将强制使用开放式锁定。 3.启用记录缓冲和表缓冲 4.在表缓冲区中追加和删除记录 12.3.2执行更新 12.3.3检测并解决冲突
2.选择锁定方式 VFP有两种锁定方式提供缓冲:保守式和开放式。 在多用户环境中,保守式缓冲能防止其他用户在对某 一特定记录或表正进行修改时访问它。保守式缓冲 为单个记录的修改提供最安全的工作环境,但是会 降低用户的操作速度。 开放式缓冲是更新记录的有效方法,因为锁定只在写 记录时生效,这样在一个远程表上使用记录或表缓 冲时,VFP将强制使用开放式锁定。 3.启用记录缓冲和表缓冲 4.在表缓冲区中追加和删除记录 12.3.2 执行更新 12.3.3 检测并解决冲突

12.4用事务处理(Transaction)管理更新数据 1控制事务处理的命令 VFP提供了3个控制事务处理的命令和1个函数 命令 作用 BEGIN TRANSACTION 初始化一个事务。 ROLLBACK 取消最近一个BEGIN TRANSACTION语句以来所做的全部修改。 TXNLEVEL() 确定当前事务的等级。 END TRANSACTION 锁定记录,将最近一条 BEGIN TRANSACTION语句以来对数据库中表所 做的全部修改写入磁盘,然后解锁记录
12.4 用事务处理(Transaction)管理更新数据 1.控制事务处理的命令 VFP提供了3个控制事务处理的命令和1个函数 命 令 作 用 BEGIN TRANSACTION 初始化一个事务。 ROLLBACK 取消最近一个BEGIN TRANSACTION语句以来所做的全部修改。 TXNLEVEL() 确定当前事务的等级。 END TRANSACTION 锁定记录,将最近一条 BEGIN TRANSACTION语句以来对数据库中表所 做的全部修改写入磁盘,然后解锁记录

2使用事务 便师事务的规则是: (1)事务起始于BEGIN TRANSACTION命令, 以END TRANSACTION命令终止,两者不匹 配会出错。 (2)ROLLBACK语句前没有BEGIN TRANSACTION:将出错。 (3)事务处理只在数据库容器中进行。 (4)如果INDEX命令改写了一个已有的索引文 件,或者任一索引文件已打开,则不能使用 INDEX命令
2.使用事务 使用事务的规则是: (1)事务起始于BEGIN TRANSACTION命令, 以END TRANSACTION命令终止,两者不匹 配会出错。 (2)ROLLBACK语句前没有BEGIN TRANSACTION将出错。 (3)事务处理只在数据库容器中进行。 (4)如果INDEX命令改写了一个已有的索引文 件,或者任一索引文件已打开,则不能使用 INDEX命令