Информация, необходимая для TDataSetProvider в Delphi
-
05-07-2019 - |
Вопрос
У меня есть проект Midas, который использует TDataSetProvider в одном из RemoteDataModules на сервере
В настоящее время я использую следующие события
- BeforeApplyUpdates - для создания объекта
- BeforeUpdateRecord - использовать объект
- AfterApplyUpdates - для удаления объекта
Вопрос:
Всегда ли будет вызываться ‘AfterApplyUpdates’, даже если это ошибка обновления ?
Решение
Если вы посмотрите на исходный код:
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.Это означает, что он всегда вызывается независимо от любого исключения.
Не связан с StackOverflow