技巧:事务在VFP更新中的应用
来源:优易学  2011-8-24 18:44:30   【优易学:中国教育考试门户网】   资料下载   IT书店

 

  IF Isuccess=.F. &&若失败
  oROLLBACK &&取消修改,结束事务1
  o=AERROR(aErrors) &&取消事务出错
  oDO CASE
  CASE aErrors[1,1]=1585
  &&当前记录被其他用户改过
  =RLOCK() &&记录加锁
  FOR nField=1 to FCOUNT()
  &&依次处理每一字段
  cField=FIELD(nField)
  IF OLDVAL(cField)<>CURVAL(cField)
  o&&字段被改过,确认修改无效,恢复原记录
  o=TABLEREVERT(.F.)
  oUNLOCK
  oEXIT
  oENDIF
  oENDFOR
  oBEGIN TRANSACTION &&开始事务2
  o=TABLEUPDATE(.T.,.T.) &&强制更新数据
  oEND TRANSACTION &&结束事务2
  oUNLOCK
  ENDCASE
  ELSE
  END TRANSACTION &&结束事务1
  ENDIF
  4 事务处理实现远程表的数据更新
  当使用远程表中的数据时,事务处理只更新视图临时表的本地备份,对远程基表的更新不起作用。使用SQLSETPROP()启动人工事务,SQLROLLBAK()和SQLCOMMIT()控制事务处理。
  在自定义类—TRANSACTION中增加方法远程表事务处理确认—RTRANSCONFIRM和取消(—RTRANSCANCEL)两种方法。同样共享数据的各个用户程序也使用行缓冲。
  — RTRANSCONFIRM 方法
  LPARAMETERS hConnect &&连接句柄
  SQLSETPROP(hConnect,'transmode',DB—TRANSMANUAL)
  Isuccess=TABLEUPDATE(.T.,.F.)
  &&非强制的更新所有修改记录
  IF Isuccess=.F. &&若失败
  oROLLBACK &&取消修改,结束事务1
  o=AERROR(aErrors) &&取消事务出错
  oDO CASE
  CASE aErrors[1,1]=1585 &&当前记录被其他用户改过
  =RLOCK() &&记录加锁
  FOR nField=1 to FCOUNT()
  &&依次处理每一字段
  cField=FIELD(nField)
  IF OLDVAL(cField)<>CURVAL(cField)
  &&字段被改过,确认修改有效
  DO CASE
  oCASE TYPE(cField)='N'
  oT1=CURVAL(cField)-LDVAL(cField)
  oREPL cField WITH T1+EVAL(cField))
  oOTHEWISE
  oREPL cField WITH CURVAL(cField))
  oENDCASE
  ENDIF
  ENDFOR
  UNLOCK
  =TABLEUPDATE(.T.,.T.) &&强制更新数据
  SQLCOMMIT(hConnect) &&提交事务
  ENDCASE
  oELSE
  oSQLCOMMIT(hConnect) &&提交事务
  oENDIF
  o— RTRANSCANCEL 方法
  LPARAMETERS hConnect &&连接句柄
  oSQLSETPROP(hConnect,'transmode',DB—TRANSMANUAL)
  oISuccess=TABLEUPDATE(.T.,.F.)
  o&&非强制的更新所有修改记录
  oIF Isuccess=.F. &&若失败
  ROLLBACK &&取消修改,结束事务1
  =AERROR(aErrors) &&取消事务出错
  DO CASE
  oCASE aErrors[1,1]=1585 &&当前记录被其他用户改过
  o =RLOCK() &&记录加锁
  oFOR nField=1 to FCOUNT()
  o&&依次处理每一字段
  ocField=FIELD(nField)
  oIF OLDVAL(cField)<>CURVAL(cField)
  &&字段被改过,确认修改无效,恢复原记录
  =TABLEREVERT(.F.)
  UNLOCK
  ENDIF
  ENDFOR
  =TABLEUPDATE(.T.,.T.) &&强制更新数据
  SQLCOMMIT(hConnect) &&提交事务
  ENDCASE
  oELSE
  oSQLCOMMIT(hConnect) &&提交事务
  oENDIF
  5 效果
  事务处理自定义类—TRANSACION已经在VFP5.0环境下调试通,使用效果良好。可以根据需要修改类或创建新的类,如创建采用开放式表缓冲时事务处理的类。如果在事务处理过程中出现断电或其他系统中断情况,数据更新将失败,此时的数据恢复由操作系统的事务处理跟踪系统解决。

上一页  [1] [2] 

责任编辑:小草

文章搜索:
 相关文章
热点资讯
资讯快报
热门课程培训