Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

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

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 09-02-2008
schaka schaka is offline
Miembro
 
Registrado: feb 2008
Posts: 30
Poder: 0
schaka Va por buen camino
busqueda incremental con mysql

Hola que tal , soy nuevo en el foro y me he enfrentado a mi primer problema tratanto de realizar una busqueda incremental utilizando una conexion zeos para poder unir mysql con delphi.
bueno mi problema es que necesito una busqueda de una cadena que recojo de un tedit la cual tiene espacios entre si, por ejemplo: "casa gato mujer amigo" esta cadena es la que leo de un edit, y me interesa hacer la busqueda incremental en los registros donde tenga la ocurrencia de "casa", "gato", "mujer", "amigo" , ya sea en un solo registro o varios , ademas de esto sin importar la posicion de ellos , es decir, si primero aparece en el registro "amigo" y despues esta "gato", o viceversa, espero me puedan ayudar, les pongo mi codigo que tengo para mi busqueda incremental.


procedure TForm1.Edit1Change(Sender: TObject);
begin

ZQuery1.close;
ZQuery1.sql.clear;
ZQuery1.sql.add('Select * from lista');
ZQuery1.sql.add('where lista like "%'+Edit1.Text+'%") ;
ZQuery1.open;


end;

esta funcion esta ligada a un evento de mi edit de onchange, entonces cada vez que escriba algo en el tedit se ejecutara el codigo que les he puesto.
Espero me puedan ayudar
Responder Con Cita
  #2  
Antiguo 09-02-2008
keyboy keyboy is offline
Miembro
 
Registrado: oct 2004
Posts: 367
Poder: 20
keyboy Va por buen camino
En términos generales podrías comenzar separando las palabras en una lista; cosa que puedes hacer fácilmente asignando el contenido del Edit a la propiedad CommaText de un TStringList. No importa que no haya comas, el TStringList considera los espacio igualmente como separadores.

Luego recorrerías la lista para construir dinámicamente la condición de la sentencia, que sería más o menos así:

Código SQL [-]
where
  campo like "%casa%" or
  campo like "%gato%" or
  campo like "%mujer%" or
  campo like "%amigo%"

es decir, una de estas líneas por cada palabra del Edit.

No obstante, veo que usas las componentes Zeos, lo que me lleva a pensar que utilizas MySQL. De ser así, pienso que te sería mejor opción crear un índice FULL TEXT sobre el campo en cuestión:

Código SQL [-]
alter table lista add fulltext(campo)

ya que, entonces, puedes utilizar la maquinaria de MySQL para este tipo de búsquedas. Por ejemplo:

Código SQL [-]
select * from lista
where match(campo) against('casa gato mujer amigo')

Bye
Responder Con Cita
  #3  
Antiguo 09-02-2008
schaka schaka is offline
Miembro
 
Registrado: feb 2008
Posts: 30
Poder: 0
schaka Va por buen camino
gracias por tu ayuda.
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

Temas Similares
Tema Autor Foro Respuestas Último mensaje
busqueda en mysql fernando1973 SQL 3 16-05-2007 15:46:30
Incremental en red jgmarduel Conexión con bases de datos 3 19-12-2005 15:52:36
Consulta Busqueda Incremental Gustavo Gowdak SQL 1 13-12-2004 09:27:08
busqueda incremental con ado slat Conexión con bases de datos 1 11-07-2004 18:32:52
Busqueda de texto en MySQL vivim82 MySQL 6 01-06-2004 16:57:21


La franja horaria es GMT +2. Ahora son las 14:37:37.


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