Club Delphi  
    Paypal   FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Providers
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

 
 
Herramientas Buscar en Tema Desplegado
  #10  
Antiguo 19-11-2007
Avatar de Al González
[Al González] Al González is offline
In .pas since 1991
 
Registrado: may 2003
Posts: 5.610
Poder: 32
Al González Es un diamante en brutoAl González Es un diamante en brutoAl González Es un diamante en brutoAl González Es un diamante en bruto
Smile

¡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));  { <--- Esta llamada a Reconcile es la que debemos condicionar
                                                              (ojo: DoApplyUpdates debe ser llamado siempre)  }
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.

Última edición por Al González fecha: 19-11-2007 a las 22:28:38.
Responder Con Cita
 



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
cache con idhttp mak8888 Internet 0 10-09-2007 12:38:44
tamaño de cache de bd omarbrdz Firebird e Interbase 3 14-09-2005 15:26:39
IBDataset actualizacion en caché Osorio Conexión con bases de datos 0 07-07-2005 19:06:07
Problemas con la cache usando IBX glopez Firebird e Interbase 5 01-09-2004 17:07:52
Transacciones y/o cache kayetano MySQL 1 25-06-2003 20:30:46


La franja horaria es GMT +2. Ahora son las 00:18:08.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi