Una cosa, cuando haces esto:
Código Delphi
[-]
if (Client1.ApplyUpdates(0) = 0) and (ClientDetalle.ApplyUpdate(0)=0) then
begin
Commit; <-------------
Result := True;
end
else
begin
Rollback; <--------------
Result := False;
end;
si mal no recuerdo, al llamar a ApplyUpdates, en este método inicia una transacción, realiza los cambios que hay pendientes en el Delta del ClientDataSet y, si todo ha ido bien, efectúa el Commit de la transacción. En caso contrario, si se ha quedado algún error (no ha sido gestionado en el evento OnReconcileError) entonces hace un Rollback de la transacción.
Repito que escribo de memoria, pero más o menos es así, con lo que el Commit y Rollback del ejemplo sobran.