FireDACのデータセットでApplyUpdatesメソッドを実行すると、例外が捕捉できません。

提供: Support
移動先: 案内検索

問題

例えば、FireDACのデータセットでApplyUpdatesメソッドを実行し、重複したレコードを挿入しているのに例外エラーが発生せず、exceptで捕捉できません。 何故でしょうか?

Delphiのコード例:

  FDConnection1.StartTransaction;
  try

    ..
    //ここで、重複したレコードを挿入する処理を実行
    ..
    FDQuery1.ApplyUpdates;
    FDConnection1.Commit;
  except
    ShowMessage('例外エラーが発生');
    FDConnection1.RollBack;
    abort;

  end;

解決

FireDACのデータセットのApplyUpdatesメソッドは、例外は発生しません。 その代わりに、発生した例外エラーの数を返します。 そのため、try~catchで例外を補足するのではなく、例外エラーの数で判断し、コミット/ロールバックどちらを実行するか決めましょう。

簡単なコード例は、以下の通りです。


Delphi:

var
  ErrorCount: Integer;
begin
  FDConnection1.StartTransaction;  
 
  ErrorCount := FDQuery1.ApplyUpdates(-1);
 
  if ErrorCount = 0 then
    FDConnection1.Commit     //エラーが無ければコミット
  else
    FDConnection1.Rollback; //エラーがあれば、ロールバック
end;

C++Builder:

    FDConnection1->StartTransaction();   
    int ErrorCount=FDQuery1->ApplyUpdates(-1);
    if( ErrorCount==0 ){
         FDConnection1->Commit();          //エラーが無ければコミット
    }else{
         FDConnection1->Rollback();        //エラーがあればロールバック
    }