if 條件 then
for 1 to 3
update1=......
if sqlca.sqlcode = -1 Then
Rollback using sqlca;
messagebox('',"error")
return
End IF
next
for 1 to 4
存盤程序1
using sqlca;
execute 存盤程序1;
if sqlca.sqlcode = -1 Then
Rollback using sqlca;
return
End IF
next
commit using sqlca;
else
for 1 to 6
update2=......
if sqlca.sqlcode = -1 Then
Rollback using sqlca;
Else
commit using sqlca;
End If
next
end if
for 1 to 7
存盤程序2
using sqlca;
execute 存盤程序2;
next
if sqlca.sqlcode = -1 Then
Rollback using sqlca;
Else
commit using sqlca;
End IF
有如上代碼,if then和ELSE 之間的兩個FOR回圈寫在一個事務中,else和end if之間是一個FOR回圈,下面的FOR 和NEXT之間是一個回圈,現在的問題是這樣的,比如3條資料在彈出ERROR這個錯誤之后發現會有一條資料更新成功,另外兩條更新不成功,不知道是什么原因。
uj5u.com熱心網友回復:
當所有回圈執行存盤程序都沒問題時,然后最后一個commit提交;uj5u.com熱心網友回復:
你可以設定3引數判斷每次提交后的狀態 err_1 err_2...uj5u.com熱心網友回復:
再看看你是不是這樣的:sqlca.autocommit = false
改一下:
if sqlca.sqlcode = -1 Then 成 if sqlca.sqlcode <> 0 then
uj5u.com熱心網友回復:
messagebox("",sqlca.autocommit)
如果不是 true 那么下面的代碼應該沒問題
if 條件 then
for 1 to 3
update1=......
if sqlca.sqlcode = -1 Then
Rollback using sqlca;
messagebox('',"error")
return
End IF
next
。。。。
uj5u.com熱心網友回復:
要注意幾點:1. sqlca.autocommit = false
2. sqlca.sqlcode = -1 改成 sqlca.sqlcode <> 0
3. 最後一段的 rollback 應該放在 for 裏面, 否則只能捕獲最后一次的狀態
4. 一般來說一段代碼只會在最后寫上一句 commit, 中間只有 rollback
uj5u.com熱心網友回復:
對于第四點想說一下,樓主的代碼中呼叫執行了2個存盤程序,如果寫在最后commit,要確認存盤程序中不要涉及到已經更新的表的相互select等操作,以及鎖的設定,避免造成死鎖
uj5u.com熱心網友回復:
這個寫的很清楚了嘛
uj5u.com熱心網友回復:
for 1 to 7存盤程序2
using sqlca;
execute 存盤程序2;
next
if sqlca.sqlcode = -1 Then
Rollback using sqlca;
Else
commit using sqlca;
End IF
你這樣寫,存盤程序里面成功或失敗你用if sqlca.sqlcode = -1 Then是判斷不到的。你用if sqlca.sqlcode = -1 Then
只能判斷到執行存盤程序陳述句是否成功。
uj5u.com熱心網友回復:
IF 條件 THENFOR 1 To 3
update1 = ......
IF sqlca.SQLCode <>0 THEN
ROLLBACK Using sqlca;
MessageBox('',"error")
RETURN
END IF
NEXT
FOR 1 To 4
存盤程序1
Using sqlca;
EXECUTE 存盤程序1;
IF sqlca.SQLCode <>0 THEN
ROLLBACK Using sqlca;
RETURN
END IF
NEXT
ELSE
FOR 1 To 6
update2 = ......
IF sqlca.SQLCode <>0 THEN
ROLLBACK Using sqlca;
RETURN
END IF
NEXT
END IF
FOR 1 To 7
存盤程序2
Using sqlca;
EXECUTE 存盤程序2;
IF sqlca.SQLCode <>0 THEN
ROLLBACK Using sqlca;
RETURN
END IF
NEXT
COMMIT Using sqlca;
這是我改過后的,但是在執行到存盤程序1的時候RETURN了,是什么原因啊?
uj5u.com熱心網友回復:
并且FOR 1 TO 3 里面的更新還是提交了。。。轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/89289.html
標籤:腳本語言
上一篇:PB中,怎么實作統計功能?
下一篇:pb9如何判斷連接的是哪個數據庫
