Club Delphi  
    Paypal   FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Conexión con bases de datos
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Conexión con bases de datos

 
 
Herramientas Buscar en Tema Desplegado
  #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
Poder: 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
 


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro


La franja horaria es GMT +2. Ahora son las 03:18:02.


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
Copyright 1996-2007 Club Delphi