Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Buscar en tlistbox con tedit (https://www.clubdelphi.com/foros/showthread.php?t=26707)

kakesoft 31-10-2005 23:43:52

Buscar en tlistbox con tedit
 
Muchos en este foros han utilizado pienso yo el Trucomanía y lo que quiero hacer pienso que sea sencillo. Me gustaría saber si alguien tiene una idea de como hacer lo mismo que hace el trucomanía en la ficha LISTADO de su explorador de trucos. O sea tengo un edit y un listbox con varias items en mi form y me gustaría hacer un sistema de búsqueda tal que a medida que vaya insertando caracteres en el edit se vayan que dando los items del listbox que coinciden con lo que está escrito en el edit, y si el edit no tiene nada escrito que se muestren todas las items del listox. Espero me ayuden.

graciassssss saludos a todos ......

roman 01-11-2005 01:04:20

El explorador de trucos de trucomanía realmente usa un dbgrid así que posiblemente lo que haga sea lanzar un Locate del DataSet que use en el evento OnChange del Edit; algo como:

Código Delphi [-]
procedure Edit1Change(Sender: TObject);
begin
  Table1.Locate('titulo_truco', Edit1.Text, [loCaseInsensitive, loPartialKey]);
end;

Desconozco qué base de datos o cuáles componentes use para mantener la base de trucos. Pero aún si no usas propiamente una base de datos, puedes hacer uso de un ClientDataSet en el que almacenes los elementos que guardarías en el ListBox y en lugar de éste usar un DBGrid.

// Saludos

Héctor Randolph 01-11-2005 02:02:54

Hace tiempo elaboré un componente que hace algo similar pero con un Edit y un ComboBox, no es exactamente lo que buscas pero tal vez puedas obtener algunas ideas del código.

AutoCompleteEdit

Instala el componente, agrega una instancia en un Form y modifica la propiedad SearchList para agregar las cadenas, después lo que escribes en el Edit se buscará en esta lista al estilo AutoCompletar.

Por otra parte, me parece mejor idea implementarlo con un DBGrid porque mi código utiliza búsqueda binaria y no es la forma óptima de hacerlo.

Un saludo.

roman 01-11-2005 02:21:33

Cita:

Empezado por HECTOR RANDOLPH
no es exactamente lo que buscas pero tal vez puedas obtener algunas ideas del código.

Y ¡vaya que se obtienen algunas ideas!

Tu componente me ha parecido magnífica. Gracias por compartirla.

// Saludos

kakesoft 01-11-2005 23:32:58

Hector te diré que eso no es lo que busco pero bueno muchas gracias y te digo lo mismo que Roman tu componente está buenísimo me servirá para otras muchas cosas de importancia que tengo que hacer

kakesoft 01-11-2005 23:36:06

Roman la idea que me diste no la he puesto en práctica todavía, o sea en estos momentos lo haré y te diré el resultado ok saludo a ti y a Hector en especial y en general a todos los que visitan esta importántísima página en INTERNET

vtdeleon 02-11-2005 00:29:48

Saludos

Segun lo que entendí, quieres hacerlo mas o menos como lo hace la busqueda de Winamp (Jump). Que a medida que se digita, vaya filtrandose.
Usando la misma idea de roman sobre un DBGrid.Teniendo la propiedad Filtered del dataset habilitado
Código Delphi [-]
table1.filter:='campo='QuoteStr(edit1.text+'%');
Si esto no funciona hazlo con Query y sentencias SQL

kakesoft 02-11-2005 14:21:46

Socios les diré que no he podido probar a completo lo que me expone Roman, pero Vtdeledon que no se nada de nada de sql ni de insertar una consulta en delphi. A ver si me explico y es si está dentro de tus posibilidades podrías explicármelo un poquito mejor, o sea, por pasos.

Graciasss de antemano

Héctor Randolph 02-11-2005 17:12:23

¿Qué manejador de base de datos usas?

Así será más fácil responder.

kakesoft 03-11-2005 22:14:24

Hector te diré que utilizo las Ado, para insertar en el form tablas de una base de datos hecha en Access.

vtdeleon 04-11-2005 01:18:53

Cita:

Empezado por kakesoft
Socios les diré que no he podido probar a completo lo que me expone Roman,

Ya lo probaste???
Cita:

Empezado por kakesoft
pero Vtdeledon que no se nada de nada de sql

Consigue algunos manuales basicos en google,
Cita:

Empezado por kakesoft
ni de insertar una consulta en delphi.

Con AdoQuery, en su propiedad SQL asignas la sentencia.
Cita:

Empezado por kakesoft
Haber si me explico

Se dice A ver. Siento haberte corregido, pero se ve extraño esa palabra así
Cita:

Empezado por kakesoft
y es si está dentro de tus posibilidades podrías explicármelo un poquito mejor, o sea, por pasos.

Creo que con lo dicho puedes hacerlo.
Código Delphi [-]
//Asignas en la propiedad SQL del Adoquery
{ Select campoamostrar from tabla
  where campo=:titulo
}
procedure Edit1Change(Sender: TObject);
begin
  with AdoQuery1 do begin
    Close;
    ParamByName('titulo').AsString:=Edit1.text;
    Open;
  end;
end;

Héctor Randolph 04-11-2005 01:33:44

Hola vtdeleon

Yo diría que aún falta algo más por resolver, la idea es que
se filtren los registros que contienene como prefijo al texto que está escrito en el TEdit.

En el código que publicaste sólo se incluyen los registros que coinciden por completo con el texto.

Falta añadir un LIKE o algo asi.

Un saludo.

vtdeleon 04-11-2005 02:30:26

Saludos
Cita:

Empezado por HECTOR RANDOLPH
Yo diría que aún falta algo más por resolver, la idea es que
se filtren los registros que contienene como prefijo al texto que está escrito en el TEdit.

En el código que publicaste sólo se incluyen los registros que coinciden por completo con el texto.

Falta añadir un LIKE o algo asi.

Tienes toda la razon, se me escapo eso. Tambien puede usar containing*


*No estoy seguro si en toda BD se puede hacer

Héctor Randolph 04-11-2005 05:42:08

Hola kakesoft prueba con esto

Código SQL [-]
SELECT * FROM nombre_tabla WHERE nombre_campo LIKE texto*

En donde texto es la palabra que deseas filtrar seguida de una asterisco.

Regularmente se utilizaría la cláusula LIKE asi

Código SQL [-]
SELECT * FROM tabla WHERE campo LIKE texto%

Pero en Access me parece que funciona con asterisco (*) y no con porcentaje (%).

Con esta sentencia y la solución de vtdeleon creo que queda resuelto.

Ahora mismo recordé que hace ya algún tiempo surgió una pregunta parecida a esta en este hilo, pero en este caso se trataba de interbase.

Un saludo.

kakesoft 05-11-2005 23:39:08

Socios disculpen pero es que no me sale nada ya que en el evento onchange de edit me da un error y ese error está en Undeclared Identifier ParamByName

roman 06-11-2005 00:00:05

Con ADO creo que sería algo así:

Código Delphi [-]
AdoQuery.Parameters.ParamByName('titulo').Value := Edit1.Text;

// Saludos

vtdeleon 06-11-2005 00:03:50

Saludos

Asegurate que ParamByName tenga su referencia del Dataset.
Código Delphi [-]
query.ParamByName(.....
//o tal vez
with query do begin
  ...
  ...
  ...
  ParamByName(...
  ... 
  ...
end;
Un poco de tu codigo no caeria mal;)

kakesoft 08-11-2005 00:03:08

Socios disculpen las molestias pero malas noticias, como no se trabajar con sql no se que tipo de errores me puede estar dando la sentencia que me aconsejan poner en la propiedad Sql del adoquery, pero esto no me ha resultado o mejor dicho no me sale lo que quiero, ustedes podrían enviarme un ejemplito por correo?, se los agradecería mucho, graciasss

vtdeleon 08-11-2005 00:24:11

1 Archivos Adjunto(s)
Saludos

Me he tomado la molestia de esto:):);)( sin ofender) :cool:

kakesoft 08-11-2005 23:48:43

Socio exactamente lo que tienes hecho en ese ejemplito es lo que quiero lograr pero con los componentes ado, intenté utilizando tu mismo ejemplo y no pude, disculpa nuevamente, pero... me podrías explicar con esos controles cómo se hace, ya que trabajo con esos y no con otros, o sea me es muy difícil trabajar con las bases de datos hechas en database desktop, las punto dbf, entre otras, prefiero las mdb de access, por lo que quisiera filtrar los valores de un campo de una tabla en un dbgrid segun se inserten los caracteres en el edit, pero siempre acuérdense utilizando los ADO, me gustaría mucho tener un ejemplito con eso, no te molestes vdeleon, pienso que los integrantes de este foros tan bueno son para ayudarse, ok, lo mismo haría yo contigo si lo tuviera que hacer, no pienses que soy bruto con este problema, simplemente un inexperto, por ahora

saludossss graciassss a todos


La franja horaria es GMT +2. Ahora son las 00:05:21.

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