Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Conexión con bases de datos (https://www.clubdelphi.com/foros/forumdisplay.php?f=2)
-   -   2 DBGrid para 1 Dataset (https://www.clubdelphi.com/foros/showthread.php?t=64621)

jphv 10-04-2009 22:34:00

2 DBGrid para 1 Dataset base (utilizando DataSetProvider y ClientDataSet)
 
Hola a todos! Hace poco me di cuenta que he estado haciendo mucho trabajo a pata y que existen componentes que me simplican la vida. Particularmente hablo de TClientDataSet. Mas de uno sabrá lo que se siente cargar los datos de una consulta a componentes visuales comunes (edit, label, memo) y volcar todos los datos por consulta cuando se ha aceptado y validado la información.
Es mi culpa por no haber leído un poco más en su momento de la ayuda en Inglés de mi Delphi 5....

Bueno, sacar un poco mi ignorancia respecto, a esto me llevo a querer buscar otras formas fáciles para hacer lo que sería un trabajo artesanal.

Lo que quiero hacer:
Escribo una aplicación de gestion de miembros de un gimnasio, actividades en las que participa y cuotas correspondientes.

Tengo una pestaña que me muestra todas las cuotas del miembro elegido. Los datos de las cuotas son:
  • Fecha (mes, año)
  • Estado (Pago, Debe, Falto -ese mes-, No se dicta)
  • Monto (puede variar la cuota con el tiempo)
  • Fecha pago (cuando entrego la platita)
Busco destacar lo importante, asi que en la interfaz quiero poner 2 DBGrid
DBGridSup --> muestra cuotas Debe
DBGridInf --> muestra cuotas Pago, Falto, No se dicta

La objetos propuestos (ayuda de acá en adelante) son:
DataSet1 --> trae todas las cuotas de ese miembro
DataSetProvider -> DataSet1
ClientDataSetSup -> DataSetProvider --> lo asocia DBGridSup
ClientDataSetInf -> DataSetProvider --> lo asocia DBGridInf

A ClientDataSetSup le pongo un filtro para que muestre las cuotas Debe (estado=3)
A ClientDataSetInf le pongo un filtro para que muestre todos los demás (estado<>3)

Mi idea era asociar de alguna manera los DBGrid para que cuando cambio datos en uno, si cumple X condición, deja de aparecer en un listado y aparece en el otro DBGrid. Todo esto usando ClienteDataSet para que no sean efectivos los cambios hasta que uno diga "Si, acepto" ... uuu que feo sonó.

Demás está decir que mi configuración no cumple los objetivos. Creo que la estoy pifiando conceptualmente. Intenté usar ApplyUpdates(0) para ver si eso hacia que lo que desaparecía en un DBGrid aparecia en el otro y no funciono.

Les agradezco a quien me pueda tirar un poco de luz sobre este asunto.

Saludos!

Rockin 11-04-2009 14:38:28

He entendido que cada vez que hagas un cambio en un DBGrid, en el otro debe aparecer o no dependiendo del cambio que hagas. Creo que lo mejor es que cada vez que hagas el cambio refresques el DBGrid, para ver si hay cambios.

Saludos.

jphv 11-04-2009 22:05:28

Gracias Rockin! Aplicar Refresh era lo que faltaba hacer para mostrar los cambios luego del ApplyUpdates.

Jugué un poco con una aplicación de pruebas Proyect1 =) de siempre para despejar dudas y me choqué con la cruda realidad. El ApplyUpdates necesario antes de Refresh me manda los cambios a la base de datos x( Así pues, me quedo sin la posibilidad de cancelar dichos cambios.

Seguí buscando y encontré el procedimiento CloneCursor.

Ahora, teniendo el ClientDataSet1 y su clon, los cambios en uno se ven en el DBGrid que les corresponde de manera automática y sólo es necesario el ApplyUpdates o CancelUpdates según lo que se decida al final.

Ahora voy a renegar con los campos fkCalculated o fkLookUp que me estan dando problemas en los ApplyUpdates.

Saludos!


La franja horaria es GMT +2. Ahora son las 13:51:59.

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