Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

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

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 16-02-2012
cmfab cmfab is offline
Miembro
 
Registrado: jun 2010
Posts: 419
Poder: 14
cmfab Va por buen camino
Refrescamiento de tablas dentro de una BD

Hola a todos en este gran Foro. Quisiera abrir un tema, el cual se ha tratado bastante pero para mi existen algunas dudas todavía y es como lo indica el nombre de este hilo el refrescamiento de las tablas en una aplicación que se usa en entornos multiusuarios en una red. en particular uso la representacion de mis tablas o consultas en grillas (cxGrid) de las Devexpress 5, pero la representación con uno u otro componente creo que no viene al caso.

el problema es refrescar las tablas cuando se hacen updates en las mismas, ya sea por inserción, edición o eliminación de artículos (registros) para poder reflejar estos cambios en las grillas o secciones de la aplicación que estén abiertas por otros usuarios.

En particular uso para una aplicación específica una BD MySQL, entonces a las tablas o consultas le indico la propiedad:

Código Delphi [-]
  Tabla.Options.Autorefresh := true;

pero esto trae consigo que cada cierto intervalo de tiempo que se da como parámetro la tabla como que se cierra y se abre perdiendo el scroll en la grilla (xcGrid). para contrarestar esto coloco este código en el evento BeforeRefresh de la tabla o consulta:

Código Delphi [-]
  fila_actual := DataSource.DataSet.Recno;
  DataSource.Dataset.DisableControls;

y en el evento AfterRefreh escribo lo siguiente:

Código Delphi [-]
  DataSource.Dataset.Recno = fila_actual;
  DataSource.Dataset.EnableControls;

todo esto funciona bien y hace que el scroll en la grilla no se pierda. las preguntas son las siguientes:

1- Existiría un componente DataSet o algo por el estilo donde no sea necesario aplicar esta forma y que los datos se refresquen automaticamente ?
2- en mi caso tengp una duda con las devexpress (cxGrid) y es que cuando tengo varios sublevels ( osea una grilla master y una subgrilla details), cuando se produce el refrescamiento y tenia los detalles expandidos (subgrilla details) estos vuelven a contraerse.

Gracias por sun grandes antenciones
Responder Con Cita
  #2  
Antiguo 16-02-2012
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.293
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Otra opción es no refrescar las tablas, sino hacer una pequeña consulta a un campo (mucho más rápida que refrescar TODA la tabla) que te diga cuando ha sido la última actualización; De esta forma sabes si debes hacerla o no.

También puedes utilizar Bookmarks para marcar la posición actual.
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #3  
Antiguo 16-02-2012
cmfab cmfab is offline
Miembro
 
Registrado: jun 2010
Posts: 419
Poder: 14
cmfab Va por buen camino
Gracias Neftalí por responder, pero podrias ampliarme mas sobre como consultar los campos ?
Responder Con Cita
  #4  
Antiguo 17-02-2012
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.293
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
La idea es mantener una tabla que permita saber si debes refrescar o no. Por ejemplo en esa tabla puedes guardar (a través de un trigger o de forma manual) la hora de la ultima modificación sobre cada tabla. Basta con que tenga dos campos, una para el nombre de la tabla y uno para la última modificación.

(1) Cada vez que actualices la tabla, actualizas el campo (trigger)
(2) Cada X tiempo consulta desde donde necesites este campo y compruebas si ha cambiado desde la ultimas vez. Si ha cambiado actualizas toda la tabla; Siempre será más eficiente esta pequeña consulta, que actualizar TODOS los registros.
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #5  
Antiguo 17-02-2012
cmfab cmfab is offline
Miembro
 
Registrado: jun 2010
Posts: 419
Poder: 14
cmfab Va por buen camino
Gracias por la explicación lo pondré a pruebas
Responder Con Cita
Respuesta



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
Buscar por dentro de un XML r_e_g_2007 OOP 1 17-11-2011 12:51:24
sumatoria entre dos tablas y distinto registro dentro de ellas douglas MySQL 2 12-01-2010 21:26:24
Subconsulta dentro de un QuickReport.. Utilizo tablas Paradox..Ayudaaaa Please... dinover7 Tablas planas 2 21-11-2008 21:45:51
Frecuencias de refrescamiento del display soportadas Leyan API de Windows 2 29-09-2008 14:29:30
tablas en sql server demasiadas tablas yeison Cristman SQL 8 10-08-2006 16:26:36


La franja horaria es GMT +2. Ahora son las 08:32:19.


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