pb事务的严重问题:
在pb中如果程序出错,事务却没有Rollback而是Commit
如 :
1、 Insert Into ...
2、dw_1.object.column_name[row] = value
如果column_name不存在,则系统会报错同时退出系统...,按道理第一步的操作无效,但是却还是执行了
请问有没有办法让事务对象只有在Commit语句的时候才提交,其它任何时候都不提交,在没有执行Commit的情况下退出系统,则应该是Rollback
问题点数:20、回复次数:9Top
1 楼sywen(古道西风)回复于 2004-12-02 08:19:40 得分 0
在connect时没有设置sqlca.AutoCommit=falseTop
2 楼config_w(美酒)回复于 2004-12-02 08:25:16 得分 0
我同意楼上的说法(正确),原先我也碰到过,就是上面的方法解决的Top
3 楼feixianzhi(函数)回复于 2004-12-02 08:32:07 得分 0
默认情况下应该是sqlca.AutoCommit=false的!
Top
4 楼wu_zh2609(蓝色的风)回复于 2004-12-02 09:11:47 得分 10
可以用
TRY statementClauseT
{ CATCH ( ThrowableType exIdentifier ) statementClauseC }{ ... }{ FINALLY statementClauseF }END TRYTop
5 楼xirumin(吃好喝好)回复于 2004-12-02 16:04:29 得分 0
autocommit都要设置成false, (图片处理时改为true), 然后, 所有内嵌SQL语句都要显式地判断:
if sqlca.sqlcode = 0 then
commit;
else
rollback;
messagebox('','')
end if
所有数据窗口的update()也同样处理
if dw_1.update(true) = 1 and dw_2.update( true ) = 1 then
commit;
....;
就不会发生你所说的问题了Top
6 楼wqzone(wqzone)回复于 2004-12-02 17:15:26 得分 0
To : xirumin(吃好喝好)
请再看看楼主的提问,不是你说的意思...Top
7 楼handycyw(xmccc)回复于 2004-12-02 19:25:12 得分 0
默认情况下是sqlca.AutoCommit=true.
sqlca.AutoCommit=true的时候,insert into是自动commit的
在connect前
sqlca.AutoCommit=false;
则程序错误的时候自动rollback
Top
8 楼sbks(hwnd,&rect)回复于 2004-12-02 20:07:18 得分 10
SQLCA.DBParm = "CommitOnDisconnect='No'"
这个选项就在database profile画板中,把选项勾上,然后看一下preview就知道了Top
9 楼wqzone(wqzone)回复于 2004-12-10 11:02:46 得分 0
To : sbks(hwnd,&rect)的意见值的借鉴...
谢谢...
Top




