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
  #2  
Antiguo 09-11-2012
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
Hola Manuel.

Disculpa que no respondiera antes a tus mensajes. Me parece bien que hayas abierto este nuevo hilo para tratar de resolver entre los compañeros las inquietudes que te aquejan.

Pero hay que ir por partes, porque es un tema amplio el que planteas. Además pienso que puedes no tener muy claros algunos conceptos. Decir también que mi experiencia con el nuevo DataSnap (Delphi 2009 en adelante) es todavía poca, pero a ver si podemos ayudar. Conmigo ten paciencia porque dispongo de poco tiempo para los próximos días. Por tu parte debes estar dispuesto a dedicar lo que sea necesario a comprender y poner en práctica todo lo que discurra aquí.

Creo conocer un poco la clase TClientDataSet, digamos que es el área donde me siento más seguro dentro de todo este terreno, pero hay compañeros que dominan mejor la práctica de montar sistemas multicapa con DataSnap. A estos los animo a aportar su conocimiento, porque seguro que no sólo a Maniches le servirá.

Analicemos el siguiente punto (evitemos los demás hasta que éste quede resuelto):

Cita:
Empezado por Maniches Ver Mensaje
[...] y que luego de haber actualizado la información en el motor de base datos estos Deltas se actualicen en los ClientdataSets del Cliente. Puede ser mediante RECONCILE o otro forma que se vea conveniente. [...] luego de hacer la actualización a la base datos viene otro problema ya que hay que refrescar el cache de los ClientDataSets por el lado del cliente, la forma sencilla seria refrescar cada dataset con Close/Open o Refresh, esto originaria ejecutar nuevamente las consultas por cada Dataset.
Primero aclarar que Delta es, como dice la ayuda de Delphi sobre la propiedad TClientDataSet.Delta: un paquete de datos del registro de cambios.
Cita:
Use Delta to pass a packet of change log data from the client dataset to a provider. Delta contains only information about those records inserted, modified, or deleted through the client.
En segundo lugar, debes saber que el método TClientDataSet.Reconcile tiene como propósito limpiar el registro de cambios del conjunto de datos después de que su Delta fue enviado al servidor con ApplyUpdates (para grabar todos los cambios en la base de datos), pero habiendo ocurrido impedimentos para guardar alguno(s) de esos cambios —como al intentar la inserción de un registro con la misma clave que otro—.

El mismo método ApplyUpdates se encarga de llamar a Reconcile cuando el servidor rechaza alguno de los cambios. Reconcile tiene varias formas de tratar con esos cambios rechazados, entre ellas disparar el evento OnReconcileError para que sea el programa (el programador de la aplicación) quien determine qué hacer (ignorar, corregir el campo en cuestión y reintentar, etcétera).

Reconcile y OnReconcileError no sirven para "refrescar" los registros que tiene en memoria el conjunto de datos cliente. No es ese su propósito.

Varios motores soportan la devolución de datos automática tras una inserción (Insert Into) o actualización (Update). Esto podría ayudarte a "refrescar" en memoria los cambios que adicionalmente el servidor haya realizado mediante disparadores Before Insert y Before Update, pero desconozco qué tan fácil sería montarlo sobre los mecanismos habituales de comunicación TDataSetProvider-TClientDataSet, además, también dependerá de la conexión que uses (ADO, dbExpress, IBX) y cómo ésta última soporte el "returning" de los Inserts y Updates en tu versión de Delphi (yo no he revisado).

Imagino que no ha de ser imposible canalizar esa devolución del servidor hasta la aplicación cliente, para que ésta actualice su "caché" de registros (TClientDataSets), ya que tanto TDataSetProvider como TClientDataSet posibilitan la transmisión de todo tipo de información.

Pero antes de intentar ese camino, considera que hay por lo menos otra forma en que un conjunto de datos cliente puede refrescar los registros que ha enviado al servidor, sin tener que hacer un completo Refresh o Close + Open. Consiste en consultar con un TClientDataSet auxiliar aquellos registros que nos interesan, y luego copiarlos al primer TClientDataSet. En este hilo se trató el tema. Creo que te puede servir.

Cierto, eso supone volver a hacer una consulta al Servidor, pero al menos no traes de él todos los registros que ya tienes en memoria, sino solamente los que acabas de mandar, reduciendo significativamente el peso de la solicitud.

Nos leemos pronto, saludos...

Al González.
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
Conectar varias Bases de Datos con Server DataSnap gcaffe Providers 5 22-05-2016 01:55:09
DataSnap XE3 - Actualización masiva de datasets con datasnap server. Maniches Conexión con bases de datos 0 08-11-2012 07:11:39
DataSnap Server Remoto - Delphi XE mrh_peru Providers 4 30-10-2011 03:51:06
datasnap para sql server??? _CALI Conexión con bases de datos 5 25-04-2011 18:49:04
Actualizacion masiva con trigger lledesma SQL 1 22-04-2009 23:24:09


La franja horaria es GMT +2. Ahora son las 05:00:40.


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