数据共享程序设计计算机等级考试

文章作者 100test 发表时间 2010:01:02 15:15:47
来源 100Test.Com百考试题网


  如果创建的应用程序在网络环境中的多台计算机上运行,或者一个表单的多个实例对相同的数据进行访问,这时就需要进行共享访问程序设计。共享访问不仅能为用户使用数据和数据共享提供更有效的方法,而且可以在必要时对访问进行限制。
  VFP支持如下功能:对数据的共享或独占访问;锁定选项;数据工作期;记录缓冲和表缓冲以及事务处理。尽管这些功能主要应用在共享环境里,但在单用户环境下也可以使用。
  一、控制对数据的访问
  因为访问数据是在文件里进行,所以有效的数据管理首先从控制这些文件开始。您需要选择访问数据的方式,还要选择在什么时间、如何限制对数据的访问。
  1、访问数据
  在共享环境中,可以用两种方式访问数据:从独占文件中访问或从共享文件中访问。若打开一个共享访问的表,其他用户也可以对该文件进行访问;若打开一个独占访问的表,其他用户就不能对该表进行读写。独占访问不具备在网络环境中共享数据的许多优点,所以应该避免使用。
  1)以独占方式使用表
  打开一个文件最严格的限制方式就是独占方式。通过界面打开一个表时,默认情况下是独占使用的,也可以利用VFP命令明确地以独占方式打开一个表。
  如果要打开一个独占使用的表,可以在命令窗口中输入如下命令:
  SET EXCLUSIVE ON
  USE cMyTable
  或者在命令窗口中输入:
  USE cMyTable EXCLUSIVE
  下列命令要求以独占方式打开一个表:
  ·ALTER TABLE
  ·INDEX:当创建、添加或删除一个复合索引标志时。
  ·INSERT [BLANK]
  ·MODIFY STRUCTURE:如果要以此命令更改一个表结构,必须以独占方式打开该表。但是,当以共享方式打开这个表时,只能在只读方式下使用此命令。
  ·PACK
  ·REINDEX
  ·ZAP
  在一个共享表中执行上述命令,VFP将返回出错信息:“文件必须以独占方式打开”。
  可以使用FLOCK()函数限制对表的访问。如果使用FLOCK()锁定表,则其它用户不能对该表进行写操作,但可以读该表。
  2)以共享访问方式使用表
  以共享方式打开一个表时,多个工作站可以同时访问该表。通过界面打开表时,可以不理会SET EXCLUSIVE默认的ON设置,而明确地用VFP命令打开一个表供共享使用。
  若要打开一个共享使用的表,可以在命令窗口中输入下列命令:
  SET EXCLUSIVE OFF
  USE cMyTable
  或者:
  USE cMyTable SHARED
  当在一个共享表中添加或更改数据时,必须首先锁定要更改的记录或整个表。对一个以共享方式打开的表或记录,可通过下列方式进行锁定:
  ·使用命令来自动锁定记录或表。
  ·用记录和表锁定函数,人工锁定一个或多个记录。
  ·用CURSORSETPROP()函数设置缓冲。
  与共享表相关的备注和索引文件也是以共享方式打开的。如果应用程序所使用的表只用于查找数据,而该应用程序的所有用户都要访问它,那么将该表标记为只读可以提高性能。
  2、锁定数据
  如果要共享访问文件,必须通过锁定表和记录来对这种访问进行管理。锁定不同于访问允许权限,它既可以对数据进行长期控制,也可以短期控制。VFP提供自动和人工锁定方式。
  1)选择记录或表锁定
  无论是哪一种锁定方式,目的都是为了防止两个用户同时写一个记录。表锁定用来防止其他用户向表中写入,但允许读整个表。由于表锁定阻止其他用户更新表中的记录,因而很少使用。
  2)人工或自动锁定
  除了选择记录锁定还是表锁定,还可以选择自动锁定或人工锁定,许多VFP命令在执行之前都会自动锁定一个记录或一个表,如果成功锁定了记录或表,则继续执行该命令,然后再解锁。下面列出了自动锁表和记录的命令:
  命令 锁定范围
  ——————————————————
  ALTER TABLE 整个表
  APPEND 整个表
  APPEND BLANK 表头
  APPEND FROM 整个表
  APPEND FROM ARRAY 表头
  APPEND MEMO 当前记录
  BLANK 当前记录
  BROWSE、CHANGE和EDIT 一旦开始编辑字段,锁定对象为当前记录和相关表中别名字段的所有记录
  CURSORSETPROP() 取决于参数
  DELETE 当前记录
  DELETE NEXT 1 当前记录
  DELETE RECORD n 记录n
  DELETE 删除多个记录 整个表
  DELETE-SQL 当前记录
  GATHER 当前记录
  INSERT 整个表
  INSERT-SQL 表头
  MODIFY MEMO 编辑开始时,锁定当前记录
  READ 当前记录和别名字段的所有记录
  RECALL 当前记录
  RECALL NEXT 1 当前记录
  RECALL RECORD n 记录n
  RECALL 恢复多个记录 整个表
  REPLACE 当前记录和别名字段的所有记录
  REPLACE NEXT 1 当前记录和别名字段的所有记录
  REPLACE RECORD n 记录n
  REPLACE 替换多个记录 整个表和别名字段的所有记录
  SHOW GETS 当前记录和别名字段引用的所有记录
  TABLEUPDATE() 取决于缓冲
  UPDATE 整个表
  UPDATE-SQL 整个表
  3)记录锁定的特点
  锁定记录的命令比锁定表的命令破坏性要小。锁定一个记录时,其他用户仍然可以添加或删除其他记录。如果记录或表已经被其他用户锁定,或者表已经被其他用户用独占方式打开,则锁定记录或表的操作失败。如果不能锁定记录,则尝试锁定当前记录的命令将返回出错信息“其他用户正在使用记录”。
  BROWSE、CHANGE、EDIT和MODIFY MEMO命令只有在编辑时才锁定记录。如果您正在编辑来自相关表记录中的字段,那么该相关记录可能会被锁定。如果当前记录或相关记录已被其他用户锁定,则锁定失败。如果锁定成功,则可以编辑该记录;在移到另一个记录或激活其他窗口时,记录解锁。
  4)表头和表锁定的特点
  一些VFP命令锁定整个表,而有些命令则只锁定表头。表锁定命令比表头锁定命令更加严厉。锁定表头时,其他用户不能添加或删除记录,但可以修改字段内的数据。
  当发出APPEND BLANK命令时,用户可以共享表而不发生冲突,但是当其他用户也向该表追加一个空白记录时,就会出错。出错信息是:“其他用户正在使用文件”。这个信息表明有两个或两个以上的用户在同时执行APPEND BLANK命令。如果无法锁定一个表,则锁定整个表的命令将返回一个错误信息:“其他用户正在使用文件”。要取消正在进行的锁定操作,可按[ESC]键。
  5)自动锁定示例
  在下面的示例中,即使customer表是以共享方式打开的,用户为了从其他表追加记录也将自动锁定整个表。
  SET EXCLUSIVE OFF
  USE customer
  APPEND FORM oldcust FOR state="OPEN"
  6)人工锁定
  您可以用锁定函数人工锁定一个记录或一个表。这些函数有:
  RLOCK() LOCK() FLOCK()
  RLOCK()函数等同于LOCK()函数,都可以锁定一个或多个记录;FLOCK()锁定一个文件。LOCK()和RLOCK()函数可以用户锁定表头,如果把0作为记录编号提供给LOCK()或RLOCK(),而且测试表明表头没有锁定,则该函数将锁定表头并返回.T.。
  如果锁定一个记录或一个表,那么一定要尽快解锁,以便其他用户访问。解锁可使用UNLOCK命令。
  这些人工锁定函数可以完成如下操作:
  *测试记录或表的锁定状态。
  *如果测试表明该记录没有锁定,则将该记录锁定并返回.T.。
  *如果该记录或表不能锁定,则根据SET REPROCESS的当前设置,再次进行锁定。
  *返回.T.或.F.,表明锁定尝试是否成功。
  注意:如果不想锁定记录,而测试该记录的锁定状态,请使用ISRLOCKED()或ISFLOCKED()函数。
  如果锁定记录或表的操作失败,SET REPROCESS命令和您当前的错误处理例程将确定是否再次尝试锁定。SET REPROCESS会影响不成功的锁定结果,因此可以利用SET REPROCESS来控制锁定尝试的次数和时间。
  下面的示例以共享方式打开customer表,并用FLOCK()函数锁定该表。如果该表锁定成功,则REPLACE ALL将更新该表中的所有记录,UNLOCK对该文件解锁;如果其它用户已经锁定该文件或文件中的记录,现在还不能锁定该表,则显示一条信息。
  SET EXCLUSIVE OFF
  SET REPROCESS TO 0
  USE customer

相关文章


读取INI文件内容计算机等级考试
如何取得某个文件的大小、修改日期及属性计算机等级考试
如何删除只读属性的文件计算机等级考试
事务在VFP更新中的应用计算机等级考试
数据共享程序设计计算机等级考试
在视图中复制表结构计算机等级考试
VFP6.0中安装字库的范例计算机等级考试
关联扩展名到自定义的VFP程序计算机等级考试
如何用FoxPro实现WINDOWS重新启动计算机等级考试
澳大利亚华人论坛
考好网
日本华人论坛
华人移民留学论坛
英国华人论坛