PB中的Commit和RollBack
来源:互联网 发布:tcp客户端程序windows 编辑:程序博客网 时间:2024/05/18 01:56
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
- PB中的Commit和RollBack
- oracle中的commit和rollback
- MySQL中的commit和rollback
- IndexWriter中的commit、rollback和close
- COMMIT和ROLLBACK
- commit和rollback
- oracle commit 和 rollback
- commit和rollback
- mysql commit和rollback
- JDBC的commit和rollback
- COMMIT和ROLLBACK的用法
- MYSQL的COMMIT和ROLLBACK
- MYSQL的COMMIT和ROLLBACK
- COMMIT和ROLLBACK的用法
- MYSQL的COMMIT和ROLLBACK
- Oracle commit和rollback处理
- MYSQL的COMMIT和ROLLBACK
- 破解字节不受限制,适用于SQLSERVER2000存储过程,函数,视图,触发器
- ant学习总结(一)
- 【Firefox扩展】一个xpi的目录结构
- [转载]Linux 硬件管理的基础知识
- SQLServer2005里怎样对使用with encryption选项创建的存储过程解密
- PB中的Commit和RollBack
- Hibernate连接池配置
- 为什么我的datawindow不能update?
- ibatis初步介绍(DBCP连接池)
- iBatis简明教程及快速入门
- 找个好的博客可真难
- 第一次加班(但我很高兴)
- 通过指定的端口进行远程连接
- [转载]用ALSA驱动声卡流程详解