PDA

Ver la Versión Completa : Filtrar


elloco
28-04-2004, 01:49:31
Hola amigos del foro.:)
Quiero hacer un filtrado, por ejemplo si hago click en un combo que me aparece Norteamérica, Centroamérica y Sudamérica, al presionar una opción me aparecen en otro combo con las características del elemento que señalé, por ejemplo en vez de mostrarme todos los idiomas que cargué, que me aparezcan los idiomas de Norteamérica. Les pido disculpa por mi pregunta si creen que es demasiado tonta.


Saludos.:)

jachguate
28-04-2004, 02:15:12
hola elloco Bienvenido a los foros. Te recomiendo la lectura de la guia de estilo (vínculo en mi firma) y de este otro hilo. Esto porque realmente faltan datos para entender lo que queres hacer...

estos datos están en una base de datos?? accedes via BDE?? o como??

En fin... después de haber leido mis recomendaciones, podes venir aqui a completar tu pregunta y seguramente alguien te ayudará.

Hasta luego.

;)

roman
28-04-2004, 06:12:36
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:


tblRegiones: TTable;
tblLenguas: TTable;


y dos componentes TDataSource enlazados a cada tabla


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:


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