2009-01-07 6 views
2

J'ai projet Midas qui utilise un TDataSetProvider dans l'un des RemoteDataModules dans le serveurinformations requises sur TDataSetProvider dans Delphi

Actuellement, je me sers des événements suivants

  • de BeforeApplyUpdates - pour créer un objet
  • BeforeUpdateRecord - pour utiliser l'objet
  • AfterApplyUpdates - à destory l'objet

Question:

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

+0

Utilisez la source Luke! ;) –

Répondre

11

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; 

Yoy voir que DoAfterApplyUpdates est appelé dans le bloc finally. Cela signifie qu'il est toujours appelé respectles de toute exception.