2014-09-03 47 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

相关问题