此查询中的事务是否正确执行?

时间:2014-09-03 12:35:10

标签: sql delphi

我不确定我是否写得正确。

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;

必须提交两次吗?或者我是否正确地编写了这个查询?

1 个答案:

答案 0 :(得分:3)

没有。仅为已启动的事务提交一次。通常,伪代码中的代码构造如下所示:

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

由于您只提交一次,因此您的代码似乎是正确的。