这种数据库提交结构合理吗?

shadowno 2009-07-22 12:13:49
1.pb中所有对数据库的操作,都可以通过sqlca.sqlcode来判断成功?..存储过程..动态sql......(都单指更新操作,且数据库端无提交操作)
2.下面代码都是用的sqlca事务,pb会自动把他们打包到一个事务中吗?一次提交,就提交上面所有操作.
3.pb9中有没有显示控制事务的语句,begin trans .....end trans..,最新版中有吗?
4.这种多步提交的结构是否可行,合理?有其他好方法吗?


cb_1的提交代码如下
// 数据窗口更新
if dw_1.update <> 1 then
rollback using sqca;
messagebox("","数据窗口更新失败失败!")
return
end if

//存储过程更新
EXECUTE ProcedureName;
if sqlca.sqlcode <> 0 then
rollback using sqlca;
messagebox("","存储过程执行失败!")
return
end if
//动态sql更新
string ls_sqlstr
ls_sqlstr = "....."
EXECUTE IMMEDIATE :ls_sqlstr using sqlca;
if sqlca.sqlcode <> 0 then
rollback using sqlca;
messagebox("","sql字符串语句执行失败!")
return
end if

//嵌入sql更新
update table1
set aa = "a"
using sqlca;
if sqlca.sqlcode <> 0 then
rollback using sqlca;
messagebox("","sql语句执行失败!")
return
end if

//统一提交上面的更新
commit using sqlca;
...全文
75 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
liubocy 2009-07-22
  • 打赏
  • 举报
回复
在SQLCA.AutoCommit = false时,在上一个commit或rollback到下一个commit之间,pb会把它当一个事务来提交。如:
update table....
commit;
delete table....
rollback;
insert into....
update table....
commit;
上例中,最后一个提交的事务是从rollback到commit之间的,如果注销那个rollback,那么最后一个事务则从commit到commit之间的了


在SQLCA.AutoCommit = true时,那么每一个update、insert 等等,pb会分别把它们当一个事务来提交,这个时候,写不写commit都没用了
liubocy 2009-07-22
  • 打赏
  • 举报
回复
你的代码本身就是一步提交的。如果哪步有错误,也会回滚,不会影响数据的完整性。
lxh_1763 2009-07-22
  • 打赏
  • 举报
回复
会自动打包到一个事务中.
beyon2008 2009-07-22
  • 打赏
  • 举报
回复
另外,你给出的这段代码不是你理解的多步提交,它是一次统一提交,你看到的rollback是异常处理,一旦在某个预执行的地方(你可以理解为错误检测)产生数据库错误,rollback会回滚它之前的事务,而且后面的return告诉机器执行到此为止了。所以,你可以理解为它有个预执行的过程,但是提交只有一次。
beyon2008 2009-07-22
  • 打赏
  • 举报
回复
1.pb中所有对数据库的操作,都可以通过sqlca.sqlcode来判断成功?..存储过程..动态sql......(都单指更新操作,且数据库端无提交操作)
答:是的,都可以通过sqlcode来判断是否成功
2.下面代码都是用的sqlca事务,pb会自动把他们打包到一个事务中吗?一次提交,就提交上面所有操作.
答:提交的标志是commit,当你看到这个词表示在做提交,没有这个语句,不会提交;当然这个事务控制方式跟sqlca的AutoCommit属性有关,默认此属性的值设为false,即需要显式commit才会提交。
3.pb9中有没有显示控制事务的语句,begin trans .....end trans..,最新版中有吗?
答:实际上pb的事务控制就是通过commit来做的,它起到的作用就是同sqlserver里的begin trans .....end trans,即从有数据操作事务的语句开始,一直到有commit的地方就是一整套事务。
4.这种多步提交的结构是否可行,合理?有其他好方法吗?
答:这种处理方式是经过无数个项目的考验的,只要你理解了它的原理灵活运用完全可以达到你的数据事务控制要求。
zhanghua_1228 2009-07-22
  • 打赏
  • 举报
回复
楼上的都说了
永生天地 2009-07-22
  • 打赏
  • 举报
回复
楼主写的不错,pb里没有别的路子了
WorldMobile 2009-07-22
  • 打赏
  • 举报
回复
1.pb中所有对数据库的操作,都可以通过sqlca.sqlcode来判断成功?..存储过程..动态sql......(都单指更新操作,且数据库端无提交操作)
答:是的,都可以通过sqlcode来判断是否成功
2.下面代码都是用的sqlca事务,pb会自动把他们打包到一个事务中吗?一次提交,就提交上面所有操作.
答:pb会打包到一个事务中,进行一次提交
3.pb9中有没有显示控制事务的语句,begin trans .....end trans..,最新版中有吗?
答:在pb中没有,如果需要,你可以用多个事务来实现
4.这种多步提交的结构是否可行,合理?有其他好方法吗?
答:以下代码比较合理,没有其它更好的办法

752

社区成员

发帖
与我相关
我的任务
社区描述
PowerBuilder 数据库相关
社区管理员
  • 数据库相关社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧