事务处理实现本地表的数据更新
用事务来缓冲对磁盘数据的更新操作,对磁盘数据更新在事务结束之后进行,如果系统不能执行对数据库的更新操作,则取消整个事务,不执行任何更新操作。
首先建立事务处理自定义类—transaction,包括本地表事务处理确认(—transconfirm)和本地表事务处理取消(—transcancel)两种方法。这两种方法的前提条件是访问共享数据的各个用户程序都使用行缓冲。用cursorsetprop(“buffering”,3)将表设置成开放式行缓冲方式。
—transconfirm 方法
begin transaction &&开始事务1
isuccess=tableupdate(.t.,.f.)
&&非强制的更新所有修改记录
if isuccess=.f. &&若失败
orollback &&取消修改,结束事务1
o=aerror(aerrors) &&取消事务出错
odo case
oocase aerrors[1,1]=1585
&&当前记录被其他用户改过
=rlock() &&记录加锁
for nfield=1 to fcount()
&&依次处理每一字段
cfield=field(nfield)
if oldval(cfield)<>curval(cfield)
o&&字段被改过,确认修改有效
odo case
case type(cfield)='n'
t1=curval(cfield)-ldval(cfield)
repl cfield with t1+eval(cfield))
oothewise
orepl cfield with curval(cfield))
oendcase
oendif
oendfor
ounlock
obegin transaction &&开始事务2
o=tableupdate(.t.,.t.) &&强制更新数据
oend transaction &&结束事务2
oendcase
else
end transaction &&结束事务1
endif
o— transcanel方法
begin transaction &&开始事务1
isuccess=tableupdate(.t.,.f.)
&&非强制的更新所有修改记录