十二行代码教你搞定写双表事务处理,数据管理更专业

VFP双表事务处理,双表是指本地表和远程表同时加上事务,这样本地表和远程表,要么同时成功,要么同时失败。

事务是为了保证所处理数据的完整性,如n个相关表被同时修改,在保存数据时,要么全部保存,要么都不保存,这只有用事务来实现。

举例:

入库单增加了一个物料,库存表的相应也应该增加。如果入库单保存成功,库存表没有保存成功,便会出现数据不一致。而加上事务之后,如果库存表没有保存成功,入库单的数据也会回滚,便不保存。

用try结构来处理事务,比用IF每句判断要简单明快得多,我见过许多人写的事务,那个就复杂,看得头晕晕的。

VFP双表事务

Begin Transaction  &&临时表事务Try       SQLSetprop(nDatasource,'transactions',2)    &&手动事务处理    *-- 此处保存的相关代码      Sqlcommit(nDatasource)  SQLSetprop(nDatasource,'transactions',1)    &&自动事务处理  End Transaction  &&临时表事务结束  Catch To ex    ROLLBACK   Sqlrollback(nDatasource) &&出错了,则事务回滚  SQLSetprop(nDatasource,'transactions',1)    &&自动事务处理   ?ex.MessageEndtry
Begin Transaction  &&临时表事务
Try   
  
	SQLSetprop(nDatasource,'transactions',2)    &&手动事务处理
	
  *-- 此处保存的相关代码
  
	This.AfterSave()
	Sqlcommit(nDatasource)
	SQLSetprop(nDatasource,'transactions',1)    &&自动事务处理
	End Transaction  &&临时表事务结束
	
Catch To ex
	llSaveSuccess =.F.   
	ROLLBACK 
	Sqlrollback(nDatasource) &&出错了,则事务回滚
	SQLSetprop(nDatasource,'transactions',1)    &&自动事务处理
	*Throw ex
	?ex.Message
EndtryBegin Transaction  &&临时表事务
Try   
  
	SQLSetprop(nDatasource,'transactions',2)    &&手动事务处理
	
  *-- 此处保存的相关代码
  
	This.AfterSave()
	Sqlcommit(nDatasource)
	SQLSetprop(nDatasource,'transactions',1)    &&自动事务处理
	End Transaction  &&临时表事务结束
	
Catch To ex
	llSaveSuccess =.F.   
	ROLLBACK 
	Sqlrollback(nDatasource) &&出错了,则事务回滚
	SQLSetprop(nDatasource,'transactions',1)    &&自动事务处理
	*Throw ex
	?ex.Message
Endtry

在猫框中,想要协调DAL_CA与MSSQLhelper同时拥有事务,只要他们在同一个句柄下就可以操作啦。

oDBSQLhelper=newobject("mssqlhelper","mssqlhelper.prg")?oDBSQLhelper.datasource  && mssqlhelper自动创建的句柄oDAL_CA=newobject("dal_ryxx","dal_ryxx.prg","",oDBSQLHelper.datasource)oDBSQLhelper2=newobject("mssqlhelper","mssqlhelper.prg","",oDBSQLHelper.datasource)

这样oDBSQLhelper,oDAL_CA,oDBSQLhelper2 都处于同一句柄,随时开启事务,一起愉快玩耍。

对了,在框架中,其实连事务都可以不用写,直接SAVE就好。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

加菲猫的VFP

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值