- 相关推荐
事务处理实现远程表的数据更新
事务处理实现远程表的数据更新
当使用远程表中的数据时,事务处理只更新视图临时表的本地备份,对远程基表的更新不起作用。使用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
构筑企业数据中心 实现理性分析决策06-04
公司事务处理委托书通用06-01
更新心情说说12-16
显卡驱动怎么更新06-21
新经典语录更新12-27
更新管理制度04-11