Tema: Filtrar
Ver Mensaje Individual
  #3  
Antiguo 28-04-2004
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
Primero que nada necesitas hacer un análisis de tus necesidades para poder plantearte correctamente tus tablas. Una posibilidad, con la escasa información que das sería:

regiones = (id, nombre)
lenguas = (id, region_id, nombre)

donde guardarías las regiones (Norteamerica, Centroamerica, etc.) y las lenguas (español, portugués, francés, etc.) Nota que el campo region_id de la tabla lenguas indica la región donde la lengua se hable.

Después puedes optar por dos caminos (entro otros). Uno es usando componentes del BDE (estoy suponiendo que usas Paradox ante la falta del dato). Usas dos componentes Table para cada una de las tablas físicas:

Código Delphi [-]
tblRegiones: TTable;
tblLenguas: TTable;

y dos componentes TDataSource enlazados a cada tabla

Código Delphi [-]
dsRegiones: TDataSource;
dsLenguas: TDataSource;

mediante su propiedad DataSet.

Para establecer la relación entre ambas tablas asignas tblRegiones a la propiedad MasterSource de tblLenguas y usas la propiedad MasterFields de ésta para indicar los campos que hacen la relación: Regiones.Id y Lenguas.Region_Id. Para ello deberás crear un índice para el campo region_id en la tabla Lenguas.

Con esto, cada vez que se seleccione un registro de la tabla Regiones automáticamente la tabla Lenguas se filtrará mostrando sólo aquellas que se hablen en dicha región.

Para mostrar los datos puedes enlazar tblRegiones a una componente TDBLookupComboBox mediantes sus propiedades ListSource, ListField y KeyField (asignándoles dsRegiones, nombre y region_id respectivamente).

---------------
Otra forma de hacer esto es con consultas sql. Usas una consulta sql para establecer la relación:

Código SQL [-]
select * from lenguas
where region_id = :region_id

Los dos puntos ( : ) antes de region_id indican que será un parámetro. La consulta la haces via una componente TQuery, digamos qryLenguas. A la propiedad DataSource de qryLenguas le asignas el dsRegiones de antes que está enlazado a tblRegiones. Te olvidas de tblLenguas y asignas dsLenguas a qryLenguas y dsRegiones, como antes, al DBLookupComboBox.

Si la segunda parte te confunde trabaja por el momento sólo con la primera.

-------------

Ahora el rollo: además de lo ya comentado por mi compañero jachguate nota que tu mensaje ni siquiera está en el foro adecuado. Lo colocaste en C++ Builder pero nada tiene que ver con lo que preguntas. Es posible que estés programando en C++ Builder pero aún así la pregunta va más por el lado de conexión con bases de datos y ya después traducirías el código Delphi a C++ Builder.

// Saludos
Responder Con Cita