PDA

Ver la Versión Completa : Refrescar DBGrids


waly2k1
25-10-2007, 06:45:47
Hola muchachos, tengo un form con 3 DBGrids: Maestro/Detalle/Detelle
el tema es cargo la maestro y cuando se posicionan en un registro refresco la segunda y lo mismo con la tercera, el tema es que no puedo refrescar automaticamente la 2da y 3ra si ya estopy en un registro de la primera. En fin un trabalenguas y espero se entienda.

Si me posiciono sobre un registro de la 1ra, se actualiza la 2da y si me posiciono en un registro de la 2da. la tercera. Pero lo que quiero es que si tengo registros en las consultas q se posicione sobre el primero y acrualice automaticamente las restantes GRIDs. Como las querys estan en un DataModule no puedo acceder a los eventos de desaplazamientos de registros, ademas un bug de ADO no me permite utilizar el evento movecomplete de cada grids.

Cual es el evento a capturar para realizar esto o de que otra manera es posible hacerlo?. :eek:

Desde ya muchas gracias!!!

Lepe
25-10-2007, 10:35:26
Para ser mas claros, pongamos el ejemplo con Clientes, facturas y productos. Tenemos esas 3 tablas relacionadas y queremos que se actualicen solas.

Consulta de clientes:

select codcliente, nombre from clientes

Consulta de facturas:
select idfactura, idcliente from factura where idcliente = :codCliente

Consulta de productos:

select idfactura, idproducto from productos where idfactura = :idfactura

Tendremos un Datasource por cada consulta y lo relacionamos de la forma habitual, es decir : dtsClientes.Dataset := qryClientes

Ahora tenemos que crear la relación Maestro-Detalle a través de los parámetros, eso se hará de forma automática asignando la propiedad qryXXX.Datasource

qryFacturas.DataSource := dtsClientes;
qryProductos.DataSource := dtsFacturas

El tema importante es que el nombre de cada parámetro coincide con el campo de la tabla Maestra, y ahí se forma la relación Maestro-Detalle.

A partir de ahora solo tienes que abrir las 3 consultas, y ellas se actualizarán solas al hacer un clic en cualquier registro (sin tener que abrir y cerrar las consultas).

Saludos

waly2k1
25-10-2007, 23:30:24
Bien Lepe y muchas gracias por la respuesta, entiendo perfectamente lo que dices, pero no es tan sencillo, paso a explicarte porque:

Mi idea es no hacer click y que me refresque los detalles, sino automaticamente al cambiar la maestra, por eso necesito un evento o la forma de codificar que sea automatico el refresh. Porque sin click veo datos de otros registros y ademas tiene que ser si o si por querys porque las maestras poseen datos de otras empresas inclusive (transparentes para el usuario). Si pudiera capturar por ej el evento movecomplete (cuando cambia de registro) de la tabla maestra seria joya, ya que ahi recien efectuo las subconsultas. Pero no puedo hacerlo y la grilla no posee eventos por rows sino por columns, con lo cual no me sirve. Sigo probando de todas formas y doy aviso si logro hacerlo.

Y como siempre amigo, muchas gracias por tu amable atención!!!

Lepe
26-10-2007, 02:09:05
¿es viable hacerlo vía dbgrid.datasource.dataset.OnAfterScroll?

Dices que los querys estan en Datamodules, pero eso no te impide asignar sus eventos desde la ventana de los grids. Si ya tienes asignados esos eventos en el datamodule no funcionaría.

Con ADO no he trabajado, siempre he usado el evento AfterScroll para detectar cambio entre registros.

Saludos

waly2k1
26-10-2007, 09:14:07
Como siempre gracias de antemano, realmente no lo tuve en cuenta al evento
y creo que sí, es eso lo que ando buscando. En cuanto lo pruebo te aviso, ahora estoy con un TDBChart que a proposito nunca lo use, asi que busco un ejemplo. En cualquier momento sigo con el DBGrid...

Lepe, gracias por existir!!! (y por las manos brindadas)
Walter