![]() |
Refrescar DBGrids
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!!! |
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:
Consulta de facturas:
Consulta de productos:
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 |
Bien gracias
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!!! |
¿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 |
Rta.
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 |
La franja horaria es GMT +2. Ahora son las 12:16:35. |
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