事务处理实现远程表的数据更新

时间:2023-03-25 21:11:48 笔试经验 我要投稿
  • 相关推荐

事务处理实现远程表的数据更新

事务处理实现远程表的数据更新
  当使用远程表中的数据时,事务处理只更新视图临时表的本地备份,对远程基表的更新不起作用。使用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
 

【事务处理实现远程表的数据更新】相关文章:

Excel实现隔多列数据求和教程10-19

Excel中数据要双击单元格能更新数据问题的解决方法08-09

sqlplus如何访问远程oracle数据库06-04

构筑企业数据中心 实现理性分析决策06-04

公司事务处理委托书通用06-01

更新心情说说12-16

显卡驱动怎么更新06-21

新经典语录更新12-27

更新管理制度04-11