¡Hola!
¿Ya echaste un ojo a los métodos que mencioné? Empecemos por revisar el código fuente de
ApplyUpdates y
Reconcile de Delphi 7 (quizá sea igual o muy parecido en versiones cercanas):
Código Delphi
[-]
function TCustomClientDataSet.ApplyUpdates(MaxErrors: Integer): Integer;
var
RootDataset: TCustomClientDataset;
begin
CheckBrowseMode;
RootDataset := Self;
while RootDataset.FParentDataSet <> nil do
RootDataset := RootDataset.FParentDataset;
with RootDataset do
if ChangeCount = 0 then
Result := 0 else
Reconcile(DoApplyUpdates(Delta, MaxErrors, Result));
end;
Código Delphi
[-]
function TCustomClientDataSet.Reconcile(const Results: OleVariant): Boolean;
var
RCB: Pointer;
I: Integer;
AField: TField;
begin
if VarIsNull(Results) then MergeChangeLog else
begin
...
end;
Result := (ChangeCount = 0);
end;
Efectivamente, DoApplyUpdates es un método función:
Código Delphi
[-]
function TCustomClientDataSet.DoApplyUpdates(Delta: OleVariant; MaxErrors: Integer;
out ErrorCount: Integer): OleVariant;
Pero su dato de resultado no es un entero que indica la cantidad de errores (eso lo regresa en el parámetro por variable ErrorCount), sino un variante arreglo conteniendo información detallada sobre los errores ocurridos. Cuando ese resultado es Null, significa que no ocurrieron errores al enviar los cambios al servidor.
ApplyUpdates llama directamente a Reconcile dándole dicho variante como parámetro:
Código Delphi
[-]
Reconcile(DoApplyUpdates(Delta, MaxErrors, Result));
Cuando ese parámetro es Null,
lo único que hace Reconcile es llamar a MergeChangeLog:
Código Delphi
[-]
if VarIsNull(Results) then MergeChangeLog else
De ahí que, sin ninguna preocupación, podemos evitar la llamada al método Reconcilie cuando no haya errores, colocando, efectivamente, una condición dentro del nuevo ApplyUpdates.
¿Vamos captando la idea?
Por aquí seguimos.
Al González.