Требуется информация о TDataSetProvider в Delphi - PullRequest
2 голосов
/ 07 января 2009

У меня есть проект Midas, который использует TDataSetProvider в одном из модулей RemoteDataMoer на сервере

В настоящее время я использую следующие события

  • BeforeApplyUpdates - для создания объекта
  • BeforeUpdateRecord - использовать объект
  • AfterApplyUpdates - уничтожить объект

Вопрос:

Будут ли всегда вызываться «AfterApplyUpdates», даже если ошибка обновления?

1 Ответ

11 голосов
/ 07 января 2009

Если вы посмотрите на исходный код:

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 вызывается в блоке finally. Это означает, что его всегда называют королями любого исключения.

...