Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Conexión con bases de datos (https://www.clubdelphi.com/foros/forumdisplay.php?f=2)
-   -   Busqueda con Locate o Lookup (https://www.clubdelphi.com/foros/showthread.php?t=31622)

noshy 12-05-2006 16:18:21

Busqueda con Locate o Lookup
 
Hola a todos, me surgio un proble,a y es el siguiente:
Tengo un Query con una tabla en la cual necesito realizar una busqueda, el tema es que necesito realizar la busqueda por un fragmento del campo, para que me entiendadn necesito que me encuentre el primer registro que contenga la cadena 'ASA', por lo cual me tiene que devolver el registro que tenga 'PASA' o 'ASADO', el problema es que lo hago con Query1.locate pero me busca por cadena completa no por fragmento, y no encuentro la funcion que lo haga. (Obviamente lo puedo hacer recorriendo registro por registro con un POS() pero al tener muchos registros se torna lenta la busqueda)

Salu2, Noshy

Acanol 12-05-2006 16:33:19

Buenas, no se si esto te servira, con el siguiente ejemplo hace o que pides pero escribiendo en un edit, por la palabra que quieres que se realice el locate... Espero que te sirva, sino es asi dime como puedo ayudarte. ;)

Código Delphi [-]
Tabla:= Nombre de tu tabla; 
Edit:= Nombre del edit donde escribes lo que quieres filtrar; 
Campo:= El campo de la tabla el cual quieres filtrar; 


//En el evento Onchange de tu edit pones lo siguiente 
Código:
procedure TForm1.Edit1Change(Sender: TObject); 
begin 
    datamodule1.Tabla.Filtered:= True; //Datamodule1, es donde se encuentra la tabla (para tenerlas un poco mas organizadas, si tienes mas de una) 
end; 

//En el evento OnFilterRecord de la tabla 

Código:
procedure TDataModule1.TablaFilterRecord(DataSet: TDataSet;  var Accept: Boolean); 
begin 
  if datamodule1.Tabla.Locate ('Campo',unit1.Form1.Edit.text,[Lopartialkey,LocaseInsensitive]) then 
       accept:=true 
  else 
       accept:= false; 

end; 

//Si solo quieres coger letras en el "Edit", añades esto en el evento "OnKeyPress" del edit 
Código:
procedure TForm1.EditKeyPress(Sender: TObject; var Key: Char); 
begin 

    if key in ['0'..'9'] then key:=#0; 

end;

noshy 12-05-2006 16:42:00

Nop
 
Gracias por tu respuesta, pero no funciona, porque sigue filtrando por el campo entero no por un fragmento, yo en el campo tengo direcciones, y necesito buscar por una palabra de la direccion no por la direccion completa o sea por in LIKE de SQL, pero necesito hacerlo en memoria para que sea mas rapido. No se si el LOCATE tieme parametros como el % de SQL.

Acanol 12-05-2006 16:49:23

Disculpa, pero a mi me funcionaba ya que lopartialkey busca que coincida una parte no todo, asi si buscamos 'A', nos mostrara lo campos Antonio Andres... vamos si no me equivoco... tal vez no te entendi lo que necesitabas. Disculpa otra vez. Si esto no te sirve por que no haces una query al campo¿? Select * from Empleado Where NOMBRE LIKE '%An%' Order by NOMBRE
Código Delphi [-]
QUERY1.SQL.ADD(....);
QUERY1.OPEN;

noshy 12-05-2006 17:12:52

Cita:

Empezado por Acanol
Disculpa, pero a mi me funcionaba ya que lopartialkey busca que coincida una parte no todo, asi si buscamos 'A', nos mostrara lo campos Antonio Andres... vamos si no me equivoco... tal vez no te entendi lo que necesitabas. Disculpa otra vez. Si esto no te sirve por que no haces una query al campo¿? Select * from Empleado Where NOMBRE LIKE '%An%' Order by NOMBRE
Código Delphi [-]
QUERY1.SQL.ADD(....);
QUERY1.OPEN;

Si tenes razon pero el lopartialkey te busca una cadena que comienze con la cadena de busqueda si buscas 'A' de muestra Antonio Andres, pero yo quiero que me muestre Antonio Andres buscando 'N' por ejemplo.

noshy 12-05-2006 17:13:47

o sea que la cadena que buscas se encuentre en cualquier parte del campo y no solamente al comienzo

luisgutierrezb 12-05-2006 18:40:10

pues para eso, puedes filtrar la tabla, algo asi como
Dataset.filter := 'Nombredelcampo like %' + buscar.text + '%';

Acanol 15-05-2006 01:45:02

No se si lo habras solucionado, pero creo que este link te servira ;) :
http://www.clubdelphi.com/foros/showthread.php?t=31663


La franja horaria es GMT +2. Ahora son las 02:15:08.

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