問題是這樣的啊。。
insert into a(id) values(1) using sqlca;
wf_test()
rollback using sqlca;
像這樣。視窗函式wf_Test() 里有一個commit陳述句;
這樣執行完wf_test以后, 上面的那條陳述句也被提交了。后面的rollback就不起作用了。。
如果才能讓這個commit不影響函式外的sql陳述句?
uj5u.com熱心網友回復:
你這樣寫代碼,確實比較有個性。我一般是
insert into a(id) values(1) using sqlca;
if sqlca.sqlcode = 0 then
commit;
else
rollback;
messagebox("","相應的錯誤提示")
end if
uj5u.com熱心網友回復:
你理解的思路不對朋友,你的視窗函式cf_Test()里commit操作的也是sqlca這個事務物件吧,同一個事務你已經提交成功了,再去回滾肯定沒作用uj5u.com熱心網友回復:
wf_test里面的代碼呢?uj5u.com熱心網友回復:
換個思路:一、函式中不要有commit或rollback;
二、函式有回傳值,-1表示SQL執行失敗,1表示SQL執行成功
三、在呼叫函式后,根據回傳值判斷SQL是否執行成功,再決定是否commit或rollback;
uj5u.com熱心網友回復:
wf_Test() 里面建一個Transaction與外面分開,就不影響了uj5u.com熱心網友回復:
wf_Test() 可以在建一個新事務。和原事務分開。也可以。Transaction trans;
trans = new Transaction;
...
commit using trans;
destroy trans;
uj5u.com熱心網友回復:
同一個事務肯定是一起提交一起回滾的,如果想和外邊的一起提交,函式的里邊不做提交和回滾只回傳sqlca.sqlcode,外邊執行函式判斷這個回傳值,如若是0就一起提交commit,如果不是就一起rollback。uj5u.com熱心網友回復:
我一般也是這樣寫轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/16488.html
標籤:基礎類
上一篇:求教,呼叫外部DLL報錯-3
下一篇:PB調取存盤程序 執行后無結果
