ADOQuery 於UpdateBatch後abort程式 抓取值錯誤 |
缺席
|
deanma
一般會員 發表:4 回覆:6 積分:2 註冊:2009-08-20 發送簡訊給我 |
[code delphi] try ADOConn.BeginTrans; Query_TMP..UpdateBatch(arAll); Query_Check.SQL.Clear; Query_Check.SQL.ADD('select xxx'); Query_Check.Open; if Not Query_Check.isEmpty then begin showmessage('資料重複!'); Abort; end; ADOConn.CommitTrans; except ADOConn.RollbackTrans; end; [/code] 由於考慮效能問題,小弟會在Query內的資料回寫資料庫後, 利用SQL語法直接查詢資料是否符合條件, 今天突然發現一個奇怪的問題, 當執行第一次存檔後,檢查出資料有問題,程式abort後, 不作任何編輯,直接再按一次存檔,Query_Check存放的檢查條件卻變成通過, 反覆測試後發現,雖然Query_TMP內顯示的是被使用者修改後的資料, 但第二次執行存檔時,資料庫記錄的還是未修改前的資料(與DBGrid顯示不一致), 導致Query_Check檢查無誤 ,而為可存檔狀態, 不知版友們是否有相關的經驗與解決方式可分享,謝謝! |
it1506
初階會員 發表:33 回覆:89 積分:49 註冊:2011-02-16 發送簡訊給我 |
你的程式怪怪的
abort 之後, 程式直接中斷, 不會去跑 except 那部分了 [code delphi] try ADOConn.BeginTrans; if Not Query_Check.isEmpty then raise Exception.Create("訊息"); end; except on e:Exception do begin showmessage(e.Message); ADOConn.RollbackTrans; end; end; [/code] ===================引 用 deanma 文 章=================== [code delphi] try ADOConn.BeginTrans; Query_TMP..UpdateBatch(arAll); Query_Check.SQL.Clear; Query_Check.SQL.ADD('select xxx'); Query_Check.Open; if Not Query_Check.isEmpty then begin showmessage('資料重複!'); Abort; end; ADOConn.CommitTrans; except ADOConn.RollbackTrans; end; [/code] 由於考慮效能問題,小弟會在Query內的資料回寫資料庫後, 利用SQL語法直接查詢資料是否符合條件, 今天突然發現一個奇怪的問題, 當執行第一次存檔後,檢查出資料有問題,程式abort後, 不作任何編輯,直接再按一次存檔,Query_Check存放的檢查條件卻變成通過, 反覆測試後發現,雖然Query_TMP內顯示的是被使用者修改後的資料, 但第二次執行存檔時,資料庫記錄的還是未修改前的資料(與DBGrid顯示不一致), 導致Query_Check檢查無誤 ,而為可存檔狀態, 不知版友們是否有相關的經驗與解決方式可分享,謝謝! |
deanma
一般會員 發表:4 回覆:6 積分:2 註冊:2009-08-20 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |