Velo de este modo:
Por un lado puedes poner a
empresas como maestra de
practicas de manera que al seleccionar una empresa sólo se muestran las prácticas de dicha empresa.
Por otro lado puedes poner a
años como maestra de
practicas de manera que al seleccionar un año sólo se muestran las prácticas de dicho año.
El problema es que tú necesitas ambos comportamientos al mismo tiempo, pero no puedes relacionar una tabla con dos maestras simultáneamente.
Supongamos por un momento que sí fuera posible. Lo que harías sería:
Código:
practicas.master1 -> empresas
practicas.masterfields1 -> 'id;emp_id'
practicas.master2 -> años
practicas.masterfields2 -> 'año;año';
De esta manera se mostrarían sólo las prácticas de las empresa seleccionada en la tabla
empresas y del año seleccionado en la tabla
años.
Pero esto, como dijimos, no es posible ya que los campos en la tabla detalle,
emp_id y
año tendrían que enlazarse con
tablas distintas
La solución entonces es crear una tabla que reuna estos dos campos. Esta tabla es
emp_años y no es más que una copia de la tabla
practicas tomando sólo los campos en cuestión y eliminado los registros duplicados:
Código:
SELECT DISTINCT emp_id, año FROM practicas
Al ser una sola tabla, puedes ponerla como maestra de
practicas. Al seleccionar un registro en
emp_años, la relación provoca que
practicas sólo muestre los registros correspondientes a la empresa y año del registro seleccionado en
emp_años.
Así, como dijimos antes, lo único que hay que hacer es ver cómo seleccionar un registro de esta tabla maestra. Pero esto ya lo sabes: por un lado seleccionas la empresa de la rejilla y el año del combo y usas el evento OnChange del combo y el evento OnScroll del dataset asociado a empresas para, en ambos, utilizar el método FindKey de la tabla emp_años.
Claro que puede parecer que esta tabla sobre en el diseño de la base de datos pero es necesaria si deseas poder hacer el filtrado mediante el uso de relaciones maestro-detalle.
Como mencioné anteriormente, en una situación muy similar yo usaba Queries para hacer el filtrado pero cada cambio provocaba una nueva consulta a la base y por tanto el despliegue de la rejilla no es inmediato. Así hasta que decidí crear la tabla extra, innecesaria para el diseño de la base pero muy útil para la interfaz de usuario.
// Saludos