麻煩各位大大了,我用delphi,然后
adoconnection1.BeginTrans;
adoconnection1.Execute(sql1);
adoconnection1.Execute(sql2);
adoconnection1.Execute(sql3);
adoconnection1.Execute(sql4);
adoconnection1.Execute(sql5);
adoconnection1.CommitTrans;
執行之后,程式無例外,沒有回滾,但是很多次操作之后,就會發現例如其中某一個sql3并沒有執行成功,該修改的資料沒有修改,而且這個時候程式也沒有拋出例外,所以也就沒有回滾
想問問是什么原因,怎么解決。謝謝
希望能夠得到解決,再次感謝,如果分不夠,可以開貼再給。
uj5u.com熱心網友回復:
Commit之后,對應的Dataset Query最好要Requery一下重繪資料比如
adoconnection1.BeginTrans;
adoconnection1.Execute(sql1);
adoconnection1.Execute(sql2);
adoconnection1.Execute(sql3);
adoconnection1.Execute(sql4);
adoconnection1.Execute(sql5);
adoconnection1.CommitTrans;
adoquery1.requery();
adoquery2.requery();
......
uj5u.com熱心網友回復:
1、這是事務處理,逐條檢查SQL陳述句,是否有錯誤,只要其中一條有錯,就不能執行任何一條SQL。2、你說的只有一條。未執行,不大可能。如果出現這類問題,應該是MSSQL服務器軟體有問題了。這也許全部執行了,你未查覺,再重新顯示(重繪)資料看看。
uj5u.com熱心網友回復:
更新不成功不表示一定要例外,程式本身沒問題,但你自己的程式邏輯可能不完整,更新不成功需要給出一定的處理uj5u.com熱心網友回復:
用SQL SERVER Profiler跟蹤執行的sql陳述句就清楚了uj5u.com熱心網友回復:
Sql3是不是有where條件限制了是否執行uj5u.com熱心網友回復:
除這個之外,另外就是SQL3執行后,后面的兩條陳述句是否把SQL3的結果覆寫掉也是有可能的。
uj5u.com熱心網友回復:
你試試先將前2條commit之后,后面3個再做一個事務uj5u.com熱心網友回復:
用資料集執行吧,設定一個屬性就行了AdoQuery.ExecuteOptions:=[TExecuteOption.eoExecuteNoRecords];
AdoQuery.Execute(?);
AdoQuery.Execute(?);
AdoQuery.Execute(?);
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/41261.html
標籤:數據庫相關
