PDA

Ver la Versión Completa : Filtrar un campo en un ComboBox


zeta2
12-06-2008, 22:20:02
Amigos, tengo un problemita con un filtro, he leído otros posts donde hablan de ello, pero no es exactamente lo que busco, he intentado usar la lógica para darle forma a lo mío pero me cuesta un poquito... A ver si me pueden ayudar.

Tengo una tabla llamada TBConsulta, los campos que deseo filtrar son:

Apellido
Nombres
DNI
Materia

La idea es filtrar el apellido de alguien en un Combobox llamado CBBuscar.

Yo a esto lo había hecho una ves, pero hace mucho tiempo y la verdad no me acuerdo.

Desde ya muchas gracias...

Caral
12-06-2008, 22:29:52
Hola
Me parece que este ejemplo (http://caral.clubdelphi.com/Publico/Ejemplos/Combobox.zip) hacia lo que necesitas.
Saludos

Fenareth
12-06-2008, 22:35:08
Hola zeta2 :)

Perdón, no comprendí muy bien... En el combobox escoges el apellido por el que vas a filtrar ?...

Si es de esta manera puedes hacer un filtro de la Tabla donde le digas que te muestre todos los apellidos que coincidan con el que buscas (me imagino que habrá más de uno)...

TablaOpen;
Tabla.Filter := 'CAMPO = '+QuotedStr(Combobox.Text);
Tabla.Filtered := TRUE;

Si no es esto lo que necesitas, podrías ser un poco más detallado ?

Saludos

zeta2
12-06-2008, 22:51:50
Si, al apellido lo saco de un ComboBox, despues veo como inserto un campo entero en un ComboBox...

Voy a probar sus ideas y luego les cuento... =)

zeta2
13-06-2008, 00:03:30
Seeeeeeeeeeeeeee!!!

Ven que era algo tonto? Gracias Fenareth y [Caral]...

Ahora investigaré como meter todo un campo en un ComboBox... Gracias... Cualquier cosa consulto...

Por otra parte quería a consultarle a Caral como hago para ser un Miembro Premium...

Gracias...

Caral
13-06-2008, 15:59:52
Hola

Por otra parte quería a consultarle a Caral como hago para ser un Miembro Premium...

Gracias...
Para hacerse un Miembro Premium lo único que se necesita es cumplir con cualquiera de estas opciones:
1- Ser un miembro activo
2- Tener un mínimo de 400 post (manteniendo continuidad)
3- Ser nominado por otro Miembro Premium.
4- Haber ayudado tanto como te ayudan (devolver lo aprendido)
5- Comentarle tu interés a algún moderador y poner cara de triste.
6- Hacerle un click al logo de PayPal y donar (esto ayuda pero se tendrá que cumplir con alguno de los otros sobre todo el 2 y 3).
Es lo que se me ocurre por lo que he leído.
Lo mejor es que comiences por el punto 5, tal vez tengas suerte.
Saludos

zeta2
13-06-2008, 22:58:22
No es por nada Caral, mas me intereza saber si hay manera de aportar, ya que estuve tantos años recurriendo a la ayuda de Club Delphi, solo quería saber si podía apoyar en algo al foro. Reconozco que no he ayudado mucho, ahora, lo haré mas seguido, ya que vuelvo a programar. Hace mucho tiempo no programo y ahora retomo.

Primero, antes de hablar con algún moderador debería dar el ejemplo no creen? XD

Bueno, apenas pueda aportar algo lo haré. Gracias por la ayuda.

Rancy
23-06-2008, 11:27:56
Tabla.Open;
Tabla.Filter := 'CAMPO = '+QuotedStr(Combobox.Text);
Tabla.Filtered := TRUE;


Saludos

Gracias por la respuesta que le diste a zeta Fenareth, a mi tambien me ha sido muy útil.

Queria preguntar si, a parte, existe la posibilidad de filtrar la tabla de modo que muestre todos los registros que coinciden parcialmente con el string según el que se filtra.
Lo diré de otro modo por si no me he explicado bien:
el caso es que mi código, vendria a ser en parte asi:


TablaOpen;
Tabla.Filter := 'CAMPO = '+QuotedStr(Edit.Text);
Tabla.Filtered := TRUE;

Como veis la diferencia es que uso un Edit con el que dejo introducir al usuario el string según el que filtrar. Lo que pregunto es si es posible que introduciendo por ejemplo "CA" el filtro haga visibles todos aquellos campos que empiecen asi (por ejemplo: Carla, Carlos, Carmen, etc...)

Lo cierto es que he estado buscando en la ayuda de delphi, y he encontrado en la información sobre el member FilterOptions, por defecto la opcion de buscar según sólo una parte del string esta activada para todos los strings que terminen en asterisco (*). Lo que hago entonces es introducir un asterisco así;

TablaOpen;
Tabla.Filter := 'CAMPO = '+QuotedStr(Edit.Text+'*');
Tabla.Filtered := TRUE;

Pero tampoco consigo que se solucione de este modo, por eso queria preguntar si a alguien se le ocurre que puedo estar haciendo mal, si tal vez no es posible lo que intento, o si se hace de otro modo.

Gracias por adelantado a todos quienes se tomen la molestia de contestarme.

Saludos!

tcp_ip_es
23-06-2008, 13:05:10
rancy yo te recomiendo siempre utilizar consultas, ya que asi no te traes todos los registros del servidor y los "filtras" en el propio servidor. Pero si aun sigues empeñado en hacerlo mediante filtros je je je :D primero me tendrás que decir con que BD trabajas si es con mysql, interbase.. etc el comodin es % de tal manera que, aparte de utilizar el like, quedaría asi:


Adotable1.filtered:=false;
Adotable1.filter:='Desc_Cliente'+' like ' + QuotedStr(Edit1.Text+'%');
Adotable1.filtered:=true;


Saludos, Tony

Rancy
25-06-2008, 08:35:44
Muchas gracias! Me funcionó perfectamente.

Bueno olvidé decir como guardo los datos es cierto. Esque necesito una aplicación lo mas simple posible, que pueda funcionar en pc's sin instalar nada; por eso, y porque la información es poca; lo guardo todo en XML.

De nuevo te agradezco tu ayuda, que me fué muy útil!

Rancy
02-07-2008, 10:36:23
Respecto al mismo tema, tengo una duda mas. Cual seria la expresion equivalente a QuotedStr, si lo que contiene la variable que hay a continuación es un entero?

Pongo aqui la parte del codigo, por si ayuda a entender mi duda:

procedure TForm2.EditCampoBuscarChange(Sender: TObject);
var
anyo: integer;
begin
DadesClients.Open;
DadesClients.Filter := ((ComboboxCampoBuscar.Text + ' like '+ QuotedStr(EditCampoBuscar.Text+'%')) +'and Edad <'+ (anyo));
DadesClients.Filtered := TRUE;
end;

El error dice que los tipos string & integer son incompatibles ( refiriendose al campo Edad, que es un entero, y a la variable anyo, que también lo es. Como doy a entender que debe tratarlos como tales y no como string?

Gracias por adelantado. :-)

tcp_ip_es
02-07-2008, 11:07:57
El campo edad en tu bd será un entero pero tu estás componiendo un string en la propiedad filter de tu dataset, que es de tipo string. Con lo que todo lo que metas en esa propiedad debe ser un string, y lo único que lo diferencia son las comillas (quotes) cuando tu campo es varchar o sin comillas cuando es numérico. De tal forma que:


procedure TForm2.EditCampoBuscarChange(Sender: TObject);
var
anyo: integer;
begin
DadesClients.Open;
DadesClients.Filter := ((ComboboxCampoBuscar.Text + ' like '+
QuotedStr(EditCampoBuscar.Text+'%')) +'and Edad <'+ inttostr(anyo));
DadesClients.Filtered := TRUE;
end;


Saludos, Tony

Rancy
02-07-2008, 11:17:41
Vaya, muchisimas gracias Tony. Respondes las preguntas mas rápido de lo que soy capaz de hacerlas!!! :D

Voy a porbar tu solución ahora mismo!

EDIT: En efecto, funciona. :)