Ver Mensaje Individual
  #11  
Antiguo 04-11-2003
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Reputación: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
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
Responder Con Cita