Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 09-03-2005
Avatar de vtdeleon
vtdeleon vtdeleon is offline
Miembro
 
Registrado: abr 2004
Ubicación: RD & USA
Posts: 3.236
Poder: 24
vtdeleon Va por buen camino
Question Busqueda Winamp

Saludos a Tod@s,

Como puedo hacer una busqueda tipo winamp, rápida, eficiente y que ocupe poca memoria?

Que componente utilizaron o que instruccion?
Responder Con Cita
  #2  
Antiguo 10-03-2005
Avatar de b3nshi
b3nshi b3nshi is offline
Miembro
 
Registrado: feb 2005
Ubicación: Tucuman - Argentina
Posts: 164
Poder: 20
b3nshi Va por buen camino
una solucion

la verdad que no se como lo harán en el winamp, pero una solcuion que te puedo dar, es que cuando hagan clic en el boton de busqueda, o presionen la "j", como se hace en el winamp, se carguen todos los nombres de archivos (no la ruta completa), en una base de datos, y dsp podes usar un componente que en estos momentos no me acuerdo como se llama para buscarlo, es algo asi como un edit. Digamos que despues cuando se elija el archivo te tiene que devolver el valor de la posicion que ocupa en la lista original, y dsp simplemente posicionar ahi el tema y que empiece a reproducir. Se entiende??? Si necesitas que sea mas claro decime y te ayudo. Esta es la solucion que se me ocurre.
Responder Con Cita
  #3  
Antiguo 10-03-2005
Avatar de vtdeleon
vtdeleon vtdeleon is offline
Miembro
 
Registrado: abr 2004
Ubicación: RD & USA
Posts: 3.236
Poder: 24
vtdeleon Va por buen camino
Gracias por tu respuesta, pero...
Me refiero a la pantalla que sale en Winamp cuando presionamos "J" (Jump to File). Esta hace un filtro muy eficiente, sin importar que las palabras esten en orden o no.

Ej:

Quiero buscar la musica de Alejandro Sanz - Amiga Mia.

puedo digitar en esa pantalla "Mia Sanz" ó "Amiga Alej" y me filtra perfectamente, puedo poner "Sanz alejandro" y hace un filtro de toda la lista que tengo de ese artista.

Que instruccion usaron?? (SQL??? LIKE %..% )

Entiendes??
Responder Con Cita
  #4  
Antiguo 10-03-2005
Avatar de mamcx
mamcx mamcx is offline
Moderador
 
Registrado: sep 2004
Ubicación: Medellín - Colombia
Posts: 3.913
Poder: 25
mamcx Tiene un aura espectacularmamcx Tiene un aura espectacularmamcx Tiene un aura espectacular
La clausula LIKE es la solucion basica que todos usan. Te puede funcionar asi que intentalo. Otra opcion es usar SOUNDEX (si lo soporta nativamente tu BD).

Para hacerlo RAPIDO usa una HashTable+SOUNDEX y te deberia resultar bueno el resultado...(sino estoy mal en Delphi la hashtable se llama buckettable?)

Ahora, este tipo de cosas se hacen con un componente de busqueda de texto completa, y TAL VEZ winamp use algun componente de estos. De hecho estoy trabajando en un proyecto para hacer una libreria de estas, pero lastima que esta en ALPHA y todavia no se puede usar .
__________________
El malabarista.
Responder Con Cita
  #5  
Antiguo 10-03-2005
Avatar de vtdeleon
vtdeleon vtdeleon is offline
Miembro
 
Registrado: abr 2004
Ubicación: RD & USA
Posts: 3.236
Poder: 24
vtdeleon Va por buen camino
Cita:
Empezado por mamcx
Para hacerlo RAPIDO usa una HashTable+SOUNDEX y te deberia resultar bueno el resultado...(sino estoy mal en Delphi la hashtable se llama buckettable?)
Disculpame Compañero,

Pero no se absolutamente nada de Hastable Soundex y Buckettable!!

Donde puedo buscar mas informacion de ellos, para saber.
Responder Con Cita
  #6  
Antiguo 13-03-2005
Avatar de vtdeleon
vtdeleon vtdeleon is offline
Miembro
 
Registrado: abr 2004
Ubicación: RD & USA
Posts: 3.236
Poder: 24
vtdeleon Va por buen camino
??????????????????
__________________
Van Troi De León
(Not) Guía, Code vB:=Delphi-SQL, ¿Cómo?
Viajar en el tiempo no es teóricamente posible, pues si lo fuera, ya estarían aqui contándonos al respecto!
Responder Con Cita
  #7  
Antiguo 15-03-2005
Avatar de mamcx
mamcx mamcx is offline
Moderador
 
Registrado: sep 2004
Ubicación: Medellín - Colombia
Posts: 3.913
Poder: 25
mamcx Tiene un aura espectacularmamcx Tiene un aura espectacularmamcx Tiene un aura espectacular
Mira en las ayudas sobre

Soundex

TBucketList

La idea es que usas BucketList para almacenar cada palabra y SOundex para hacer comparaciones...

Quiero decir, en vez de algo directo como:


if 'Ejemplo' in ListaString

Es

if Bucket('Ejemplo') in Soundex(ListaString)

PD: Obvio que esa sintaxis me la invente
__________________
El malabarista.
Responder Con Cita
  #8  
Antiguo 15-05-2005
Avatar de vtdeleon
vtdeleon vtdeleon is offline
Miembro
 
Registrado: abr 2004
Ubicación: RD & USA
Posts: 3.236
Poder: 24
vtdeleon Va por buen camino
Lightbulb Solucionado

Saludos.

Creo haber encontrado la solucion. Me he empe~ado un poco en eso hasta conseguirlo.
Le mostrare el codigo para que el que le interese y para optimizar el mismo.
Estoy habierto a sugerencias

Este formulario contiene: 1 edit, 1 dbgrid y 1 query

Código Delphi [-]
procedure Tfrmbuscar.FormCreate(Sender: TObject);
   begin
     vbusca.Clear;//Edit
     Codigo:='';//DECLARADA PRIVATE
     cadena:=TStringList.Create;//DECLARADA PRIVATE
       Query1.Close;
       with Query1.SQL do begin
         Clear;
         Add('select Codemp, Nombre, apellidos');//+column );
         Add('from empleados');//+tabla);
       end;
       Query1.Open;
   end;
   
   procedure Tfrmbuscar.vbuscaKeyUp(Sender: TObject; var Key: Word;
     Shift: TShiftState);
   var
     n:integer;
   begin
 if (Length(trim(vbusca.Text))>0) then
     if key in [VkKeyScanA('A')..VkKeyScan('Z'), VkKeyScanA('0')..VkKeyScan('9'),
      VK_BACK, vk_space, vk_delete] then begin
         cadena.CommaText:=vbusca.Text;
       with Query1 do begin
         Close;
         if cadena.Count<>nkey then begin
           condi:=' (rtrim(nombre) ||'' ''|| rtrim(apellidos)) containing :data'+'0';
           for n:= 1 to cadena.Count-1 do begin
             condi:=condi +' and (rtrim(nombre) ||'' ''|| rtrim(apellidos)) containing :data'+inttostr(n);
           end;
           if SQL.Count>2 then
             sql.Delete(2);
           sql.Insert(2,'where '+condi);
         end;
         for n:=0 to ParamCount-1 do begin
           ParamByName('data'+inttostr(n)).AsString:=cadena[n];
         end;
         nkey:=n;
         if not Prepared then
           Prepare;
         Open;
       end; 
     end;{ else key:=  #0;}
   end;

Hasta Luego
__________________
Van Troi De León
(Not) Guía, Code vB:=Delphi-SQL, ¿Cómo?
Viajar en el tiempo no es teóricamente posible, pues si lo fuera, ya estarían aqui contándonos al respecto!

Última edición por vtdeleon fecha: 19-05-2005 a las 22:24:05. Razón: Aclarar un poco & corregir
Responder Con Cita
  #9  
Antiguo 26-08-2005
Avatar de sakuragi
sakuragi sakuragi is offline
Miembro
 
Registrado: feb 2004
Ubicación: root
Posts: 1.435
Poder: 22
sakuragi Va por buen camino
vtdeleon

gracias por el aporte

lo estoy checando

nomas unas preguntas. si no es mucha molestia


"cadena" es
Código Delphi [-]
 private
     cadena:TstringList;

las valiables

"nkey"
"condi"
"ParamByNAme" esta no creo que sea variable pero tambien me marca error
"prepare"

todas esas me marcan "undeclared indetifier"


saludos

gracias
__________________
OpenSuse OpenOffice.org icomputo
Responder Con Cita
  #10  
Antiguo 26-08-2005
Avatar de vtdeleon
vtdeleon vtdeleon is offline
Miembro
 
Registrado: abr 2004
Ubicación: RD & USA
Posts: 3.236
Poder: 24
vtdeleon Va por buen camino
Cita:
Empezado por sakuragi
las valiables

"nkey"
"condi"
"ParamByNAme" esta no creo que sea variable pero tambien me marca error
"prepare"

todas esas me marcan "undeclared indetifier"
El nkey en una variable Integer
condi es String
ParamByName viene referenciado del Query1
prepare es un metodo del Query1
__________________
Van Troi De León
(Not) Guía, Code vB:=Delphi-SQL, ¿Cómo?
Viajar en el tiempo no es teóricamente posible, pues si lo fuera, ya estarían aqui contándonos al respecto!
Responder Con Cita
  #11  
Antiguo 26-08-2005
Avatar de sakuragi
sakuragi sakuragi is offline
Miembro
 
Registrado: feb 2004
Ubicación: root
Posts: 1.435
Poder: 22
sakuragi Va por buen camino
esta linea me marcava error en "ParamByName"

Código Delphi [-]
 ParamByName('data'+inttostr(n)).AsString:=cadena[n];
entonses le puse "parameters"
Código Delphi [-]
 Parameters.ParamByName('data'+inttostr(n)).AsString:=cadena[n];

ahora me marco error en el "AsString"
se lo cambie por "value"
Código Delphi [-]
ParamByName('data'+inttostr(n)).Value:=cadena[n];

"prepare" me seguia marcando error creo que es "prepared"
Código Delphi [-]
if not Prepared then
           Prepare;

pues lo cambie por "prepared" no se si este bien pero el error se quito


nkey y condi lo puse variables locales

ya todo esto lo corri y se me traba


probe muchos mesajes para sever donde esta el erro

y el en el open del query

una sentencia sql a de estar mal hecha =S


bueno gracias

ati si te fuenciona tal y como esta?

o tengo que poner otras cosas que no se muestran en el codigo
puesto

saludos
__________________
OpenSuse OpenOffice.org icomputo
Responder Con Cita
  #12  
Antiguo 26-08-2005
Avatar de vtdeleon
vtdeleon vtdeleon is offline
Miembro
 
Registrado: abr 2004
Ubicación: RD & USA
Posts: 3.236
Poder: 24
vtdeleon Va por buen camino
Cita:
Empezado por sakuragi
entonses le puse "parameters"
Código Delphi [-]
Parameters.ParamByName('data'+inttostr(n)).AsString:=cadena[n];
Al parece usas los componentes ADO
Cita:
Empezado por sakuragi
"prepare" me seguia marcando error creo que es "prepared"
Código Delphi [-]
if not Prepared then
Prepare;
Esto no es muy necesario, pero prepara el query para la sentencia
Cita:
Empezado por sakuragi
nkey y condi lo puse variables locales
Ponlo Private, no locales del procedimiento

Cita:
Empezado por sakuragi
y el en el open del query

una sentencia sql a de estar mal hecha =S
No se que base de datso usas, pero para esto use FireBird. Y funciona
__________________
Van Troi De León
(Not) Guía, Code vB:=Delphi-SQL, ¿Cómo?
Viajar en el tiempo no es teóricamente posible, pues si lo fuera, ya estarían aqui contándonos al respecto!
Responder Con Cita
  #13  
Antiguo 26-08-2005
Avatar de sakuragi
sakuragi sakuragi is offline
Miembro
 
Registrado: feb 2004
Ubicación: root
Posts: 1.435
Poder: 22
sakuragi Va por buen camino
gracias

alamejor es por eso

yo toy usando ms sql server 2000 con ado delphi7

entonses nesesito cambir unas sentencias para sql server

lo intentare

saludos
__________________
OpenSuse OpenOffice.org icomputo
Responder Con Cita
  #14  
Antiguo 26-08-2005
Avatar de sakuragi
sakuragi sakuragi is offline
Miembro
 
Registrado: feb 2004
Ubicación: root
Posts: 1.435
Poder: 22
sakuragi Va por buen camino
ah se me paso comentar

si me puede esplicar que hacen esa sentencias sql

Código Delphi [-]
condi:=' (rtrim(nombre) ||'' ''|| rtrim(apellidos)) containing :data'+'0';
Código Delphi [-]
condi:=condi +' and (rtrim(nombre) ||'' ''|| rtrim(apellidos)) containing :data'+inttostr(n);

como no conosco FireBird. si ,me puede esplicar ala mejor las puedo pasar a ms sql server

"
"containing" que es?

saludos
__________________
OpenSuse OpenOffice.org icomputo
Responder Con Cita
  #15  
Antiguo 26-08-2005
Avatar de vtdeleon
vtdeleon vtdeleon is offline
Miembro
 
Registrado: abr 2004
Ubicación: RD & USA
Posts: 3.236
Poder: 24
vtdeleon Va por buen camino
Saludos

Esa sentencia concatena los campos. Para no tener dos campos divido, decidi unirlos con ||, le agregue otro de esos para el espacio ya que si no lo hago
Código:
 Tabla original
 ================
 nombre				apellido
 Alberto			  Gonzalez
 Casimiro			 Boneti
 Maria				 Perez
 **********************
 Resultado 
 Empleados
 Alberto Gonzalez
 Casimiro Boneti
 Maria Perez
 ************
 Un solo campo
__________________
Van Troi De León
(Not) Guía, Code vB:=Delphi-SQL, ¿Cómo?
Viajar en el tiempo no es teóricamente posible, pues si lo fuera, ya estarían aqui contándonos al respecto!
Responder Con Cita
  #16  
Antiguo 27-08-2005
Avatar de vtdeleon
vtdeleon vtdeleon is offline
Miembro
 
Registrado: abr 2004
Ubicación: RD & USA
Posts: 3.236
Poder: 24
vtdeleon Va por buen camino
Saludos

Cita:
Empezado por sakuragi
"containing" que es?
La palabra misma (traducida al espa~ol) lo dice todo
__________________
Van Troi De León
(Not) Guía, Code vB:=Delphi-SQL, ¿Cómo?
Viajar en el tiempo no es teóricamente posible, pues si lo fuera, ya estarían aqui contándonos al respecto!

Última edición por vtdeleon fecha: 31-08-2005 a las 18:24:44.
Responder Con Cita
  #17  
Antiguo 31-08-2005
Avatar de sakuragi
sakuragi sakuragi is offline
Miembro
 
Registrado: feb 2004
Ubicación: root
Posts: 1.435
Poder: 22
sakuragi Va por buen camino
Post

hola de nuevo

al ir borrando lo que escribiste caracter por caracter te lo actualiza?

por que como lo pase el ms sql.

me pasa eso no me va actualizando al ir quitando caracter por caracter.

saludos

gracias
__________________
OpenSuse OpenOffice.org icomputo
Responder Con Cita
  #18  
Antiguo 31-08-2005
Avatar de vtdeleon
vtdeleon vtdeleon is offline
Miembro
 
Registrado: abr 2004
Ubicación: RD & USA
Posts: 3.236
Poder: 24
vtdeleon Va por buen camino
Saludos

Dices qeu no actualiza al pulsar caracter por caracter?
Es extra~o ya qe el codigo esta puesto en el evento OnKeyUp del Edit de busqueda. Revisa bien tu codigo
__________________
Van Troi De León
(Not) Guía, Code vB:=Delphi-SQL, ¿Cómo?
Viajar en el tiempo no es teóricamente posible, pues si lo fuera, ya estarían aqui contándonos al respecto!
Responder Con Cita
  #19  
Antiguo 31-08-2005
Avatar de sakuragi
sakuragi sakuragi is offline
Miembro
 
Registrado: feb 2004
Ubicación: root
Posts: 1.435
Poder: 22
sakuragi Va por buen camino
todo funciona bien

al ir pulsando caractec x caracter te va mostrando el filtro actulizando

nomas pregunto si al hacerlo al reves

ir quitando "vk_back" caracter X caracter se va filtrando actualizando.

para saber si el codigo original lo hace,

para saber yo si lo pase mal el codigo o es algo que le falta, para buscarle:


ya que por ejemplo:

busco , computadora

me va a rojar toas la palabras con computadora

emtonses si le voy quintado un caracter
"computador"

el filtro no se me regresar a computador se queda en "computadora"

asi susesivamente

saludos

espero haver sido claro

=P
__________________
OpenSuse OpenOffice.org icomputo
Responder Con Cita
  #20  
Antiguo 31-08-2005
Avatar de vtdeleon
vtdeleon vtdeleon is offline
Miembro
 
Registrado: abr 2004
Ubicación: RD & USA
Posts: 3.236
Poder: 24
vtdeleon Va por buen camino
Saludos

hmm, no se si entendi bien.(faltan comas y puntos en algunas oraciones)

Chequea bien tu codigo y/o BD, ya que me funciona a la perfeccion. Por cada pulsacion de uno de estas teclas
Código Delphi [-]
if key in [VkKeyScanA('A')..VkKeyScan('Z'), VkKeyScanA('0')..VkKeyScan('9'),
       VK_BACK, vk_space, vk_delete] then begin
Va filtrando*

*Me gustaria que hubiera alguna opinion sobre el codigo planteado, ya que no es muy practico porque (en red) carga mucho y a medida qeu se encuentren mas registro, mas lentoe es.
__________________
Van Troi De León
(Not) Guía, Code vB:=Delphi-SQL, ¿Cómo?
Viajar en el tiempo no es teóricamente posible, pues si lo fuera, ya estarían aqui contándonos al respecto!

Última edición por vtdeleon fecha: 31-08-2005 a las 19:24:52.
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro


La franja horaria es GMT +2. Ahora son las 10:09:16.


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
Copyright 1996-2007 Club Delphi