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

时间:2021-04-30 11:49:14 笔试经验 我要投稿

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

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

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

实现基于网页的数据库数据导入10-06

用SQL实现查询数据不显示错误数据的方法11-10

Sql Server、Access数据排名的实现方法11-12

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

JavaScript数据结构与算法中集合的实现11-18

ORACLE数据表管理建议10-19

如何实现多个硬盘同步数据传输07-25

贵州安顺实现社保卡制卡数据自助采集09-22

基于MAPGIS的县级土地利用现状数据库更新研究09-02

油田数据远程传输终端设备通信技术论文11-28