2014-09-03 50 views
0

我不確定我是否正確寫入。在此查詢中事務是否正確執行?

procedure TMainForm.AdvGlowButton1Click(Sender: TObject); 
begin 
DataModule2.INS_Query.Close; 
DataModule2.INS_Query.SQL.Clear; 
DataModule2.FDTransaction1.StartTransaction; 
try 
if cxlookupcombobox1.Text ='' then begin 
.... 
.... 
DataModule2.INS_Query.ExecSQL; 
DataModule2.FDTransaction1.Commit; 
end else begin 
if cxlookupcombobox1.Text <>'' then 
...... 
...... 
DataModule2.INS_Query.ExecSQL; 
DataModule2.FDTransaction1.Commit; 
end; 
except 
on e: exception do begin 
Showmessage(format('Error occured. Error is: %s',[e.message])); 
DataModule2.FDTransaction1.Rollback; 
DataModule2.MYTABLE.Cancel; 
end; 
end; 

它執行所有權利,但有些事情是嘮叨我。

DataModule2.FDTransaction1.Commit;

是否必須提交兩次?或者我是否正確編寫了這個查詢?

+0

在顯示的代碼中,您只能執行一個'DataModule2.FDTransaction1.Commit'。無論是在主if語句還是在else語句中。總之,'else'子句中的第一個條件與主'if'子句中的第一個條件相同似乎有點奇怪。這是真實的代碼嗎? – 2014-09-03 12:40:37

+0

是的,它是真實的,只要我可以告訴 – user3927897 2014-09-03 13:04:30

回答

3

否。僅對已啓動的事務提交一次。通常,僞代碼中的代碼結構如下所示:

Transaction.Start; 
try 
    Query.Execute; 
    Query.Execute; 
    ... 
    Transaction.Commit; 
except 
    Transaction.Rollback; 
    raise; 
end; 

而且由於您只提交一次,所以您的代碼在這種方式下似乎是正確的。

+0

你應該在回滾之後添加'raise;'以獲得信息爲什麼; o) – 2014-09-03 13:58:22

+0

@SirRufo,我的僞語言不支持重新拋出異常:-) – TLama 2014-09-03 14:00:44

+0

OP異常處理顯示消息 - 壞主意。提出新的異常或者只是重新評估原始文件是處理這種情況的方式,應用程序將顯示消息。 – 2014-09-03 14:23:07

相關問題