请教: 关于手动"开始一个事务"的问题??

老板卤两个蛋蛋 2005-11-23 02:02:59
我在程序中这样开始一个事务:
ls_sql = "BEGIN TRANSACTION"
EXECUTE IMMEDIATE :ls_sql USING SQLCA; //开始一个事务
................ //多句写数据库的SQL语句
if SQLCA.SQLCode <> 0 then
messageBox ("数据库错误", "XXXX !~r~n~r~n错误代码:" + &
string (sqlca.sqlDbCode) + "~r~n详细信息:" + &
sqlca.sqlERRText, stopSign!)
rollback using sqlca;
return -1
else
commit USING SQLCA;
return 1
end if

但是发现最终没有提交 (SQLCA.SQLCode =0),也没提示任何错误,(在SQL查询分析器里可以发现没有COMMIT)

如果把 "EXECUTE IMMEDIATE :ls_sql USING SQLCA; //开始一个事务"
这句注释掉的话反而可以正确提交了


请问是什么原因? 究竟有没必要执行: EXECUTE IMMEDIATE :ls_sql USING SQLCA;
//autoCommit = false
...全文
133 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
lzheng2001 2005-11-23
  • 打赏
  • 举报
回复
如果楼主一定要用BEGIN TRANSACTION的话也可以用以下方法
ls_sql = "BEGIN TRANSACTION"
EXECUTE IMMEDIATE :ls_sql USING SQLCA; //开始一个事务
...
...
ls_sql = "Commit TRANSACTION"
EXECUTE IMMEDIATE :ls_sql USING SQLCA; //提交事务.

但是不建议使用这种方法,不同的数据库可以效果会不同的,况且不是所有的数据库都支持这种语句。


redriver_liu(红河) 的方法才是好的方法。
lovelihp 2005-11-23
  • 打赏
  • 举报
回复
支持 redriver_liu(红河) 的说法
  • 打赏
  • 举报
回复
好 多谢 明天揭贴

真有点晕 感觉自己做程序多了人都变得迂腐了 靠.............
redriver_liu 2005-11-23
  • 打赏
  • 举报
回复
晕,不需要这么麻烦的,设置:
autocommit = false
....... //多句写数据库的SQL语句
if SQLCA.SQLCode <> 0 then
messageBox ("数据库错误", "XXXX !~r~n~r~n错误代码:" + &
string (sqlca.sqlDbCode) + "~r~n详细信息:" + &
sqlca.sqlERRText, stopSign!)
rollback using sqlca;
return -1
else
commit USING SQLCA;
return 1
end if
一手软一手硬 2005-11-23
  • 打赏
  • 举报
回复
你不要搞复杂了。
PB会管理的,你只要根据sqlca.sqlcode的状态来决定commit 还是rollback.
teachman_999 2005-11-23
  • 打赏
  • 举报
回复
哈哈
teachman_999 2005-11-23
  • 打赏
  • 举报
回复
我是富贵

754

社区成员

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

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