Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Conexión con bases de datos (https://www.clubdelphi.com/foros/forumdisplay.php?f=2)
-   -   Ayuda para crear un filtro (https://www.clubdelphi.com/foros/showthread.php?t=39437)

day_eli 19-01-2007 17:38:53

Ayuda para crear un filtro
 
Buen día para todos...estoy migrando de vb6 a delphi 6, y les confieso que se me ha hecho un poco dificil.

Aqui les tengo algo a ver si pueden ayudarme:
Tengo 2 TComboBox, uno para mostrar los paises y otro para mostrar los estados, lo que quiero es que al seleccionar un país, el combo de los estados tenga automaticamente los estados del país seleccionado. ¿Cómo puedo hacer Esto?

Agradezco mucho a Quienes puedan Ayudarme (a no hacer tan frustrante esta migración:o)!!

Onti 19-01-2007 17:48:01

Podriras utilizar el evento OnCloseUp del TComboBox para detectar el momento que seleccionan un país y aplicar un filtro el el Combo de los estados, ahora esto depende de la forma en la que estas "cargando" los combos con los valores de países y estados

Generalmente para el mismo caso yo utilizo el componente DBLookupComboBox con el cual puedo relacionar directamente a los campos de una tabla

roman 19-01-2007 17:55:16

Supongo que tendrás tus tablas paises y estados similares a éstas:

paises = (id, pais, ... )
estados = (id, estado, pais_id)

donde id es la llave primaria.

Tendrás dos Table (o los dataset que uses para tu base), tblPaises y tblEstados, enlazados a estas tablas. Tomas dos DataSource, dsPaises y dsEstados y los conectas a los Table mediante su propiedad DataSet.

Ahora, lo que debes hacer es establecer la relación maestro-detalle entre paises y estados. Para ello, en tblEstados asignas dsPaises a su propiedad MasterSource y en su propiedad MasterFields pones id;pais_id para relacionar la llave de la tabla paises con la llave foránea pais_id de la tabla estados.

Finalmente, en lugar de usar ComboBox, usa dos DBLookupComboBox, digamos cbPaises y cbEstados. Popnes sus propiedades así:

cbPaises.ListSource: dsPaises
cbPaises.KeyField: 'id';
cbPaises.ListField: 'pais'

y similar para los estados.

De esta manera, los combos mostrarán automáticamente los registros de las tablas, y, gracias a la relación con MasterSource y MasterFields, el combo de los estados se filtra automáticamente.

// Saludos

day_eli 19-01-2007 17:58:20

Yo trate de utilizar esos DbLookUpComboBox....pero no supe. Entonces lo que hice fue insertar un TIbTable para los Paises, y en el OnCreate del Form escribí este codigo:

with TBLPaises do
begin
first;
while not eof do
begin
if (cmbpaises.Items.IndexOf(FieldByName('PAIS').AsString)=-1)then
cmbpaises.Items.Add(FieldByName('PAIS').AsString);
next;
end;
end;

Y así Asigne los paises al combo de Paises

roman 19-01-2007 18:28:14

Cita:

Empezado por day_eli
pero no supe.

Pues ahora ya lo sabes. Sólo que hay un pequeño error en lo que puse. Primero, para poder establecer la relación maestro-detalle, debes agregar un índice sobre la llave foránea pais_id y asignarlo en la propiedad IndexName de tblEstados. Y la propiedad MasterFields es simplemente id. En resumen:

tblEstados.IndexName: nombre del índice sobre pais_id
tblEstados.MasterSource: dsPaises
tblEstados.MasterFields: id

Si la llave primaria de paises (y, por tanto, la llave foránea de estados) consta de más de un campo, entonces en MasterFields pones todos los campos que conforman la llave, separándolos con ;.

Toda la relación es más fácil hacerla usando el editor de MasterFields (doble clic sobre el botón de los tres puntos)

// Saludos

day_eli 19-01-2007 20:32:45

Gracias!!! La verdad me ha sido muy util la Ayuda que me han prestado Uds.

Muy Agradecida.

day_eli 19-01-2007 21:19:30

Ahora mi pregunta sería...¿La lista de elementos de un DBLookUpComboBox puede desplegarse como los ComboBox?, es decir ¿Se pueden Ver Varios Elementos hacia abajo de la lista??

day_eli 19-01-2007 21:50:28

utilizando la propiedad DropDownRows!!!...listo!!!


La franja horaria es GMT +2. Ahora son las 10:49:41.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi