一、主要问题
对于简单的局域网环境下开发VFP程序,主要须注意的是数据共享冲突的问题。
二、解决办法
在明确网络设计的重点——如何解决两个或两个以上用户同时修改数据时所产生的冲突——后,我们来讨论解决这个问题的方法。
基本方法有三种:
1、对数据独占访问;
2、对数据共享访问;
3、缓冲数据访问;
其中1,2两点在庄稼的中级教程第十三课网络程序设计初步中有这方面的介绍,为了方便大家整体阅读,我在这里再多罗嗦两句。
1)独占方式
以独占方式打开的表,其他用户不能对该文件读写。
代码:
set exclusive on 或 use XXX exclusive
use XXX
只能在独占方式下执行的命令有index,reindex,pack,zap,alter table,insert,
modi stru等
2)共享方式
以共享方式打开的表,多用户可同时访问它。
代码:
set exclusive off 或 use XXX shared
use XXX
对于共享的数据表,在对其进行添加或更新时,就涉及到锁定与解锁的问题。
[2-1]锁定数据
锁定数据一般有自动锁定和人工锁定两种。
自动锁定就是一些vfp命令在执行之前都会自动锁定一个记录或一个表,如果成功锁定后才继续执行该命令,执行完后解锁。(vfp命令的自动锁定范围可参见相关书籍)
人工锁定是通过使用锁定函数人工锁定一个记录或一个表。可能用到的函数有:
Rlock() 锁定记录(rlock()等同于lock())
Flock() 锁定表
set reprocess to [尝试加锁次数]
set multilock on 锁定多条记录的系统设置
ISRlocked()/Isflocked() 测试该记录是否被锁定
代码:
set exclusive off &&共享方式
set reprocess to 1 &&加锁一次
use XXX &&打开共享表
IF Flock() &&锁定表并判断是否成功
&&如果不想锁记录,只想测试记录是否加锁,则使用isrlocked()
replace all XX with XX &&锁定成功执行替换
unlock &&解锁
else
wait window "File in use by another user." nowait
endif
[2-2]数据解锁
数据解锁相对于加锁亦有两种解锁方式。
对于自动加锁的记录,只需移动记录指针就能解锁。
对于人工加锁的记录,必须使用下面的解锁命令:
unlock,unlock all
end transaction,tableupdate()
另外在使用set multilocks off或flock()命令建立新的锁定前,自动解除当前锁定还有比较彻底的命令:clear all,close all,quit.怎么样?彻底吧!:)
[2-3]我还想说的一点
设计表单时,使用私有数据工作期,原因很长,就不说了。
3)缓冲方式
缓冲方式包括两种手段:共享数据使用缓冲及事务处理的概念.
责任编辑:小草