Busquedas por cualquier criterio, sin especificar ninguno
Hola;
Vereis, es que estaba pensando como poder hacer busquedas al estilo de Windows Media 11. Si buscas en la biblioteca de medios, en un campo escribes algo, y conforme escribes va filtrando. Pero esque va super-rapido. Esto lo haria en el evento OnChange, si, pero ¿como hacer para buscar por cualquier criterio, sin especificar dicho crieterio? En un programa Tpv que tengo en unas tiendas de ropa, ya hice algo parecido, pero no se si se podra hacer de otra forma. En el Tpv tengo un Edit en el cual el usuario puede introducir directamente Ean, Referencia o Codigo propio sin especificar nada. El programa hace una busqueda en una tabla que cree para ello donde se almacenan 2 datos: El string para la busqueda (ean, ref o id) y el id del articulo. Pero, no se como hacer para que por ejemplo en el caso de tratarse de libros, que buscara editorial. Y es que las editoriales ( los nombres ) no estan en la tabla de libros, si no el codigo. La busqueda en Windows Media 11, me gusta mucho. Escribes por ejemplo: "Bad" y te muestra las canciones que contengan la palabra Bad, pero ademas si un album se llama asi, muestra tambien el album entero. Si escribes una fecha muestra los albumes con dicha fecha y si algun titulo de album o cancion contiene ese numero, pues tambien. Y si escribo "Bad smoth criminal" muestra el tema smoth criminal que esta dentro del disco Bad. Esque si utilizo la misma formula que tengo en el T.p.v. para los libros, me da que seria demasiado. Se crearia una tabla inmensa. Por que por ejemplo para los titulos de los libros, cada palabra deberia de almacenarla y referenciarla al id del libro. Y lo pero que veo es el tema de campos que son codigos, como la editorial. Alguna idea. ¿Alguien utiliza una tabla de esta manera para busquedas? |
Se me ocurre algo así:
luego en delphi:
|
Gracias basti;
Pero me da el siguiente error: "Type mismatch in expression" Las tablas son dBase. Perdon, he debido decirlo antes. |
Cuando te dá ese error es proque estas tratando de involucrar dos tipos de datos distintos. Asegurate que si un campo es de tipo Varchar, String, Integer, Numeric,...etc, estos coincidad el valor que le enviaras por medio del Parametro (AsString, AsInteger, AsFloat,...)
Saludo |
Gracias vtdeleon;
Efectivamente ese era el error. Ahora funciona, pero me pregunto yo si sera posible hacer lo siguiente: Dados estos 3 titulos, por ejemplo: DELPHI MOLA ! ( EDIT: ANAYA ) MOLA DELPHI ! ( EDIT: ANAYA ) BIBLIA DE DELPHI ( EDIT: EVEREST ). Si escribo en el edit de busqueda: "ANAYA" muesta los 3. Si escribo EVEREST, muestra el ultimo. Pero si escribo: "DELPHI MOLA", aparace solamente el primero. Y yo lo que quisiera conseguir es que mostrara DELPHI MOLA Y MOLA DELPHI. Y otro caso es si escribo: "ANAYA DELPHI", que me mostrara los dos de ANAYA en cuyo titulo aparece la palabra DELPHI. Volviendo al Windows Media y las busquedas en la biblioteca: Hay 3 Albumes donde hay canciones que tienen la palabra "Bad". 2 son de Scorpions y 1 de Michael Jackson. Pues bien, en el campo de busqueda, yo escribo "bad" y muestra: El disco de Michael que se llama Bad ( este lo muestra completo ) y las 2 canciones de los 2 discos de Scorpions ( solo cada cancion, no el disco. puesto que el disco no se llama Bad). Si sigo escribiendo: "bad smooth criminal" entonces, muestra la cancion smooth criminal del disco bad. Fijaros, que no hay ningun disco que se llame "bad smooth criminal" ni ninguna cancion que se llame a si. Osea, que busca por palabras separadas, no la cadena. Si escribo "Anaya Delphi", claro, no sale nada. No existe ninguna editorial llamada "Anaya Delphi" ni ningun titulo. Con el codigo de Basti, funciona, pero toda la cadena. Le he añadido '%' antes del Edit para buscar la cadena en cualquier posicion. No se si me he expliado bien con tanto Bad y Smooth :D pero para entenderlo mejor, podeis mirar aqui |
Saludos
Una vez hice una chorrada de código para hacer búsquedas parecidas a como lo hace Winamp con los mp3. Mira a ver si te funciona, aunque te advierto que no está muy optimizado ni nada, y que creo que se podría mejorar, pero ahí tienes un avance. http://www.clubdelphi.com/foros/show...ghlight=winamp http://www.clubdelphi.com/foros/show...ghlight=winamp |
|
Creo que necesitas mirar el proyecto MUTIS de mamcx.
Si no recuerdo mal, así como por encima, es un motor de busquedas. Suerte. |
Cita:
"Capability Not Supported" |
1 Archivos Adjunto(s)
un pequeño .dpr con el codigo:
|
Dónde te da el error?
Saludo |
Al escribir en el Edit
|
Que base de datos usas?
Creo que yo lo habia hecho para interbase. |
Cita:
Hoy ya no me da tiempo, pero mañana lo pruebo con interbase. |
Lo estoy probando con Interbase y al escribir en el Edit me da este error:
List index out of bounds(2) |
Vaya, :( como había dicho antes "es una chorrada de codigo".
El error viene del TStringList. Pero la idea que tenia en ese momento era usar containing para la búsqueda, en vez de Like. Delimitar el Stringlist por espacio, asi la cadena dada por el edit estará separada por palabra. Entonces por cada palabra que haya, agregar una linea de búsqueda. |
La franja horaria es GMT +2. Ahora son las 07:54:56. |
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