讨论一下PB调用存储过程问题

xyqiqi 2006-06-19 03:52:44
各位朋友,对PB调用存储过程的问题,大家可发现什么问题,怎么解决的?
今天我用PB调用一个存储过程,执行的时候,
如果sqlcocd<0或sqldbcode<0,我就
messagebox()
然后rollback
可是没有用,居然提交了,如果先rollback再messagebox就可以回滚。
急着我没有办法,直接把错误提示保存的变量中,先roolback再messagebox()
如果各位朋友发现过这样的问题,并且有好的解决办法,请大家都把解决办法贴出来,谢谢!
...全文
1499 30 打赏 收藏 转发到动态 举报
写回复
用AI写文章
30 条回复
切换为时间正序
请发表友善的回复…
发表回复
Powertion 2006-10-12
  • 打赏
  • 举报
回复
多人同时访问一张表的情况很多
如果一个事务没提交/回滚就能锁住整个表,那我们都不要做了!

请释疑
Powertion 2006-10-12
  • 打赏
  • 举报
回复
有理,我也是这样想的,如果锁定也是瞬间的
g2g2g 2006-10-12
  • 打赏
  • 举报
回复
理解事务不难,思路要清晰:
1、前(PB代码)/后台(存储过程)对事务的理解一样,把前台update()函数理解为INSERT,UPDATE SQL语句,前后台是否分开事务、或前后台1个事务,就看业务的需要了,注意SQL语句的执行顺序就行。
2、后台触发器不能作为事务,它处在在前台update()函数和 COMMIT/ROLLBACK USING SQLCA;代码之间。触发器返回的值,决定update()函数的返回值。
MakeToday 2006-10-10
  • 打赏
  • 举报
回复
sqlca本身就是一个事务对象,他调用的存储过程本身就是一个嵌套的事务,
只有pb的事务对象才能提交结果,回滚可以在存储过程里,也可以在pb里.但只能回滚一次.
rollback一定要在messagebox前面执行.
rita187878 2006-09-18
  • 打赏
  • 举报
回复
我顶! --------------------- |水 是 生 命 之 源! |买 点 卡,拿 工 资 |http://www.pay3 65.com.cn ---------------------
Powertion 2006-09-18
  • 打赏
  • 举报
回复
我知道了,sqlca.sqlerrtext要在rollback之前取
Powertion 2006-09-13
  • 打赏
  • 举报
回复
为什么dw.update()不成功时候取sqlca.sqlerrtext取不到???
谢良 2006-09-12
  • 打赏
  • 举报
回复
樓主如果是SQL2000的話,我建議你直接在Server上調試,那才是正確的做法,而且也很好調試。再說你的s_procedure在寫的時候當遇到Error 本來就應有Return 才對。
hemhem 2006-09-12
  • 打赏
  • 举报
回复
先MESSAGE后ROLLBACK本身就不能这样写,你想想如果是多用户在操作,你这里一个MESSAGEBOX把事务给占了不是造成其他人不能用了啊,
应该先把ERRTEXT写进变量再MESSAGEBOX
orcd 2006-08-18
  • 打赏
  • 举报
回复
存储过程感觉写的时候不好调试,,虽然也有调试工具
hjw01592 2006-08-18
  • 打赏
  • 举报
回复
学习
gjz_1209 2006-08-18
  • 打赏
  • 举报
回复
要调试存储过程用.NET比较方便。
gjz_1209 2006-08-18
  • 打赏
  • 举报
回复
回滚交给存储过程去做,PB只捕获返回值,如在PB中用事务控制,要写在MESSAGEBOX前。
sun1976 2006-08-16
  • 打赏
  • 举报
回复
搭顺风车问个问题

pb10 如何使用sqlserver带output参数的存储过程?
注:低版本pb用sqlserver接口直接连库,存储过程使用没有问题
pb10不提供sqlserver专用接口,该用odbc连接就不行了,execute不能成功
polestarxu 2006-08-15
  • 打赏
  • 举报
回复
同意楼上的
一般这么写
string ls_err
ls_err = sqlca.sqlerrtext
rollback using sqlca;
messagebox('',ls_err)
小潜s 2006-08-14
  • 打赏
  • 举报
回复
另外,楼主先messagebox,再rollback,这种写法明显是存在问题的,如果跳出messagebox以后,用户不去确认,则事务一直处于锁定状态,相关的表的锁一直不会被释放,如果此时有其它事务试图访问 这些表,就会被锁住,所以,在事务rollback或commit前,是不应该存在与用户的交互过程的,除非应用是单机应用,不存在并发的问题
xyqiqi 2006-07-05
  • 打赏
  • 举报
回复
就算写了,也回滚了。
因为是事物嵌套,以外面的事物为准。
wanglv 2006-06-29
  • 打赏
  • 举报
回复
在pb中执行rollback 并不回滚存储过程中的对数据库的操作
wangsw1976 2006-06-29
  • 打赏
  • 举报
回复
messagebox()是一个要人为干预的东西,只要有人为做的东西一般都是写在后面的
lzheng2001 2006-06-29
  • 打赏
  • 举报
回复
在pb中执行rollback 并不回滚存储过程中的对数据库的操作
==================
这种说法是错误的!!!
除非存储过程中写了rollback或commit语句,否则,在PB中一样可以rollback.
加载更多回复(10)

740

社区成员

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

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