線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:1897
推到 Plurk!
推到 Facebook!

ADOQuery 於UpdateBatch後abort程式 抓取值錯誤

缺席
deanma
一般會員


發表:3
回覆:5
積分:1
註冊:2009-08-20

發送簡訊給我
#1 引用回覆 回覆 發表時間:2014-10-28 14:43:18 IP:59.125.xxx.xxx 訂閱

[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
初階會員


發表:30
回覆:83
積分:47
註冊:2011-02-16

發送簡訊給我
#2 引用回覆 回覆 發表時間:2014-10-29 09:28:50 IP:59.120.xxx.xxx 未訂閱
你的程式怪怪的
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
一般會員


發表:3
回覆:5
積分:1
註冊:2009-08-20

發送簡訊給我
#3 引用回覆 回覆 發表時間:2014-10-31 15:59:15 IP:220.133.xxx.xxx 訂閱
abort終止後,
會進到except無誤!

系統時間:2017-10-19 8:11:02
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!