Question

J'ai un projet Midas qui utilise un TDataSetProvider dans l'un des RemoteDataModules du serveur

Actuellement, je profite des événements suivants

  • BeforeApplyUpdates - pour créer un objet
  • BeforeUpdateRecord - pour utiliser l'objet
  • AfterApplyUpdates - pour supprimer l'objet

Question:

Est-ce que "AfterApplyUpdates" sera toujours appelé même s'il s'agit d'une erreur de mise à jour?

Était-ce utile?

La solution

Si vous regardez le code source:

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;

Oui, vous voyez que DoAfterApplyUpdates est appelé dans le bloc finally. Cela signifie qu'il est toujours appelé le respect de toute exception.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top