2

サーバーの RemoteDataModules の 1 つで TDataSetProvider を使用する Midas プロジェクトがあります。

現在、私は次のイベントを利用しています

  • BeforeApplyUpdates - オブジェクトを作成する
  • BeforeUpdateRecord - オブジェクトを使用する
  • AfterApplyUpdates - オブジェクトを破棄する

質問:

更新エラーの場合でも、'AfterApplyUpdates' は常に呼び出されますか?

4

1 に答える 1

11

ソースコードを見ると:

function TCustomProvider.DoApplyUpdates(const Delta: OleVariant; MaxErrors: Integer;
  out ErrorCount: Integer; var OwnerData: OleVariant): OleVariant;
begin
  SetActiveUpdateException(nil);
  try
    try
      if Assigned(FOnValidate) then
        FOnValidate(Delta);
      DoBeforeApplyUpdates(OwnerData);
      Self.OwnerData := OwnerData;
      try
        Result := InternalApplyUpdates(Delta, MaxErrors, ErrorCount);
      finally
        OwnerData := Self.OwnerData;
        Self.OwnerData := unassigned;
      end;
    except
      on E: Exception do
      begin
        SetActiveUpdateException(E);
        raise;
      end;
    end;
  finally
    try
      DoAfterApplyUpdates(OwnerData);
    finally
      SetActiveUpdateException(nil);
    end;
  end;
end;

最終ブロックで DoAfterApplyUpdates が呼び出されていることがわかります。これは、例外に関係なく常に呼び出されることを意味します。

于 2009-01-07T20:40:14.617 に答える