PB中的Commit和RollBack
用PowerBuilder的人都肯定有用到过Commit(提交事务语句)和RollBack(回滚事务语句)。在理解上有一点是值得注意的,这里我想和大家一起来分享:
1、提交事务语句COMMIT
COMMIT语句提交事务,完成数据库的物理修改。执行该语句后,将关闭所有先前打开的游标(CURSOR)和过程(PROCEDURE),并开始一个新的事务。COMMIT语句的语法格式为:
COMMIT{USING TransactionObject};
其中,TransactionObject是需要永久更新数据库的事务对象名,缺少时使用事务对象SQLCA。
2、回滚事务语句ROLLBACK
ROLLBACK(回滚)语放弃自上一个COMMIT、ROLLBACK或CONNECT语句以来的所有数据库操作,关闭所有的游标和过程,并开始一个新的事务。其语法格式为:
ROLLBACK{USING TransactionObject};
其中,TransactionObject是事务对角名,缺少时使用事务对象SQLCA;
注意:在PB中应用最多的DataStore,而当在进行Commit,RollBack时,并没有清除DataStore中的内容。
案例:
……
//数据更新
ll_returnvalue = lds_detail.Update(true,true)
If ll_returnvalue > 0 Then
st_text.Text = '店铺'+ls_site+'detail.dbf数据处理成功!'
ll_returnvalue = lds_inventory.Update(true,true)
If ll_returnvalue > 0 Then
st_text.Text = '仓存数据处理成功,正在提交…'
Commit using SQLCA;
st_text.Text = '恭喜,数据提交成功!'
f_readwrite('r')
Else
Rollback using SQLCA;
f_readwrite('e')
End If
Else
Rollback using SQLCA;
f_readwrite('e')
End If
……
lds_detail(销售DataStore),lds_inventory(仓存Datastore)以上的代码在进行循环操作时,如果某个lds_detail更新失败,Rollback using SQLCA之后继续循环时,lds_detail由于功能需要会赋新值,而这时lds_inventory中的内容虽然没有更新,但内容还在。所在在继续循环时就会一次更新,产生意料之外的错误---数据不一致。
解决办法:
在每次Rollback后应即可释放(Destroy)或(Reset)DataStore。
正确代码:
……
//数据更新
ll_returnvalue = lds_detail.Update(true,true)
If ll_returnvalue > 0 Then
st_text.Text = '店铺'+ls_site+'detail.dbf数据处理成功!'
ll_returnvalue = lds_inventory.Update(true,true)
If ll_returnvalue > 0 Then
st_text.Text = '仓存数据处理成功,正在提交…'
Commit using SQLCA;
st_text.Text = '恭喜,数据提交成功!'
f_readwrite('r')
Else
Rollback using SQLCA;
Destroy lds_inventory //或 lds_inventory.Reset()
f_readwrite('e')
End If
Else
Rollback using SQLCA;
Destroy lds_inventory //或 lds_inventory.Reset()
f_readwrite('e')
End If
……
PB中的Commit和RollBack
最新推荐文章于 2021-04-15 23:42:13 发布
本文介绍了PowerBuilder中的Commit和Rollback语句使用方法,强调了在循环操作中如何避免数据不一致的问题,通过适时释放或重置DataStore来确保数据的一致性和事务的正确处理。
部署运行你感兴趣的模型镜像
您可能感兴趣的与本文相关的镜像
Qwen3-8B
文本生成
Qwen3
Qwen3 是 Qwen 系列中的最新一代大型语言模型,提供了一整套密集型和专家混合(MoE)模型。基于广泛的训练,Qwen3 在推理、指令执行、代理能力和多语言支持方面取得了突破性进展
2911

被折叠的 条评论
为什么被折叠?



