Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Refrescamiento de tablas dentro de una BD (https://www.clubdelphi.com/foros/showthread.php?t=77659)

cmfab 16-02-2012 14:26:53

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

Neftali [Germán.Estévez] 16-02-2012 15:01:24

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.

cmfab 16-02-2012 15:29:33

Gracias Neftalí por responder, pero podrias ampliarme mas sobre como consultar los campos ?

Neftali [Germán.Estévez] 17-02-2012 10:07:44

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.

cmfab 17-02-2012 14:35:12

Gracias por la explicación lo pondré a pruebas


La franja horaria es GMT +2. Ahora son las 12:06:13.

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