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 21-08-2010
lucas05 lucas05 is offline
Miembro
 
Registrado: ago 2010
Posts: 116
Poder: 14
lucas05 Va por buen camino
busqueda incremental

Hola, estoy realizando una búsqueda en forma incremental en Delphi 7 y MySQL.
Estoy usando 1Edit, 1DBGrid, 1DataSource, 1ADOQuery.
En el ADOQuery coloco la siquiente sentencia sql:
select * from empleados order by apellido asc
Para que en el DBGrid aparesca la información de la tabla de empleados ordenada por apellido en forma ascendente.

Para realizar la búsqueda en forma incremental pongo el siguiente código en el evento OnChange del Edit.

With ADOQuery 1 do
begin
Close;
SQL.Clear;
SQL.Add('select * from empleados where apellido like'+Char(39)+Edit1.Text+'%'+Char(39));
Open;
end;

Cuando realizo la búsqueda la primera vez no hay problema, pero cuando quiero realizar una nueva busqueda y borro el apellido que habia puesto en el Edit, la información que estaba en el DBGrid ordenada en forma ascendente aparece desordenada (recuerden que en ADOQuery le habia puesto una sentecia sql para ordenarla en forma ascendete).
Como debo hacer para que la infomación que muestro en el DBGrid se mantenga siempre ordenada en forma ascendente por apellido, a un cuando realice una busqueda incremental?

Espero haber sido claro y muchas gracias por su atención.
Responder Con Cita
  #2  
Antiguo 21-08-2010
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola Lucas.

Reemplazá la consulta por:
Código Delphi [-]
  with ADOQuery1 do
  begin
    Close;
    SQL.Text:='SELECT * FROM EMPLEADOS WHERE APELLIDO LIKE '+QuotedStr(Edit1.Text + '%');
    Open;
  end;

Saludos.
Responder Con Cita
  #3  
Antiguo 21-08-2010
luisdevis luisdevis is offline
Miembro
 
Registrado: mar 2004
Posts: 32
Poder: 0
luisdevis Va por buen camino
Has eliminado el order by...

Piensa que has modificado el query del objeto sin un order by.
Al modificar el edit tiene la sentencia sql :
SELECT * FROM EMPLEADOS WHERE APELLIDO LIKE '+QuotedStr(Edit1.Text + '%');
Que no tiene ningún "order by"

Cámbiala por esto :
SELECT * FROM EMPLEADOS WHERE APELLIDO LIKE '+QuotedStr(Edit1.Text + '% ORDER BY APELLIDO ASC');
Responder Con Cita
  #4  
Antiguo 22-08-2010
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Cita:
Empezado por luisdevis Ver Mensaje
Piensa que has modificado el query del objeto sin un order by.
Al modificar el edit tiene la sentencia sql :
SELECT * FROM EMPLEADOS WHERE APELLIDO LIKE '+QuotedStr(Edit1.Text + '%');
Que no tiene ningún "order by"

Cámbiala por esto :
SELECT * FROM EMPLEADOS WHERE APELLIDO LIKE '+QuotedStr(Edit1.Text + '% ORDER BY APELLIDO ASC');
Amigo... tenés toda la razón.
Responder Con Cita
  #5  
Antiguo 22-08-2010
lucas05 lucas05 is offline
Miembro
 
Registrado: ago 2010
Posts: 116
Poder: 14
lucas05 Va por buen camino
Ok, gracias voy a intentarlo.

Saludos.
Responder Con Cita
  #6  
Antiguo 22-08-2010
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 25
Caral Va por buen camino
Hola
mmmmmm

Código SQL [-]
SELECT * FROM EMPLEADOS WHERE APELLIDO LIKE '+QuotedStr(Edit1.Text)+ '% ORDER BY APELLIDO ASC;

Saludos
__________________
Siempre Novato
Responder Con Cita
  #7  
Antiguo 22-08-2010
lucas05 lucas05 is offline
Miembro
 
Registrado: ago 2010
Posts: 116
Poder: 14
lucas05 Va por buen camino
Hola, intente poniendo el nuevo código, y al compilarlo noy problema.
Pero cuando escribo algún apellido en el Edit para realizar la búsqueda, se borra toda la información que habia en el DBGrid y no muestra nada.
Cual puede ser el problema?

Nuevamente gracias y saludos.
Responder Con Cita
  #8  
Antiguo 22-08-2010
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Cita:
Empezado por lucas05 Ver Mensaje
Hola, intente poniendo el nuevo código, y al compilarlo noy problema.
Pero cuando escribo algún apellido en el Edit para realizar la búsqueda, se borra toda la información que habia en el DBGrid y no muestra nada.
Cual puede ser el problema?

Nuevamente gracias y saludos.
Hola Lucas.

¿ Podrías poner el código del evento OnChange tál como lo escribiste ?

Saludos.
Responder Con Cita
  #9  
Antiguo 22-08-2010
lucas05 lucas05 is offline
Miembro
 
Registrado: ago 2010
Posts: 116
Poder: 14
lucas05 Va por buen camino
Hola, este es el codigo que pongo en el evento OnChange:

With ADOQuery1 do
begin
Close;
SQL.Clear;
SQL.Text:='select * from empleados where apellido like '+QuotedStr(Edit1.Text+'% order by apellido asc');
Open;
end;

Gracias y saludos.
Responder Con Cita
  #10  
Antiguo 23-08-2010
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 25
Caral Va por buen camino
Hola
Sabes lo que es concatenar?.
Saludos
__________________
Siempre Novato
Responder Con Cita
  #11  
Antiguo 23-08-2010
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Cita:
Empezado por lucas05 Ver Mensaje
Hola, este es el codigo que pongo en el evento OnChange:

With ADOQuery1 do
begin
Close;
SQL.Clear;
SQL.Text:='select * from empleados where apellido like '+QuotedStr(Edit1.Text+'% order by apellido asc');
Open;
end;

Gracias y saludos.
Hola lucas.

Copia y pegá esta línea tal cuál está.

Código Delphi [-]
  SQL.Text:= 'SELECT * FROM EMPLEADOS WHERE APELLIDO LIKE '+
             QuotedStr( Edit1.Text + '%' ) + ' ORDER BY APELLIDO';

A mí me funciona perfectamente.


Saludos.

Última edición por ecfisa fecha: 23-08-2010 a las 01:32:34.
Responder Con Cita
  #12  
Antiguo 23-08-2010
lucas05 lucas05 is offline
Miembro
 
Registrado: ago 2010
Posts: 116
Poder: 14
lucas05 Va por buen camino
Hola ecfisa, muchas gracias, volví a escribir el código tal cual me dijiste y ahora funciona muy bien.

Nuevamente gracias y saludos.
Responder Con Cita
  #13  
Antiguo 23-08-2010
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
De nada lucas.

Aprovecho para aclararte que cometí una omisión intencional:
No especifiqué el sentido del orden ASC por que lo asume por defecto, aunque el acentuarlo, hace más legible el sentido
del ordenamiento al leer el código.

Si lo querés en sentido descendente tenés que utilizar indefectiblemente: DESC

Saludos.

Última edición por ecfisa fecha: 23-08-2010 a las 05:05:48.
Responder Con Cita
  #14  
Antiguo 23-08-2010
Avatar de AzidRain
[AzidRain] AzidRain is offline
Miembro Premium
 
Registrado: sep 2005
Ubicación: Córdoba, Veracruz, México
Posts: 2.914
Poder: 21
AzidRain Va camino a la fama
iba a comentar algo sobre este tipo de búsquedas y el costo en velocidad y tráfico hacía el servidor que tiene, pero me encontré que los chicos de google parece que ya lo resolvieron:
aquí
__________________
AKA "El animalito" ||Cordobés a mucha honra||
Responder Con Cita
  #15  
Antiguo 23-08-2010
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Cita:
Empezado por AzidRain Ver Mensaje
iba a comentar algo sobre este tipo de búsquedas y el costo en velocidad y tráfico hacía el servidor que tiene, pero me encontré que los chicos de google parece que ya lo resolvieron:
aquí
Hola AzidRain.

¿ Se te ocurre alguna idea de como lo han implementado ? Por que hasta donde he probado las busquedas incrementales son bastante ineficientes...


Saludos.
Responder Con Cita
  #16  
Antiguo 23-08-2010
Avatar de AzidRain
[AzidRain] AzidRain is offline
Miembro Premium
 
Registrado: sep 2005
Ubicación: Córdoba, Veracruz, México
Posts: 2.914
Poder: 21
AzidRain Va camino a la fama
ASi es eficsa...solo son útiles con unos cuantos cientos de registros pero conforme la cosa crece se va poniendo muy canija. Es por eso muy "novedoso" como lo habrán implementado los de Google, aunque claro con la potencia de cómputo que tienen ayuda bastante.

Antes eran famosas estas búsquedas, cuando solo incluía tablas locales de unos cuantos cientos de registros (en Clipper llegué a hacer algo igual, hace mil años, claro) pero cuando ya hablamos de miles y hasta millones de registros resulta ocioso esto. Prefiero más el enfoque de escribir una frase y hasta tenerla lista aplicar un "like % %" para obtener todos los que contengan lo buscado. En aplicaciones administrativas (facturación, clientes, etc.) es mucho más común que el usuario solo recuerde alguna parte de todo el nombre que como empieza..."Me acuerdo que era un tal 'Fernandez'", "creo que era algo de 'aceros'" y así...Al final el usuario se siente más como si usara un buscador de internet, además de que a lo largo del uso se irán dando de alta nombres muy similares por lo que por ejemplo:

Sean los nombres:

Código:
COMERCIOS ORGANIZADOS
COMERCIALIZADORA DE GANADO
COMERCIAL DE SEGUROS
COMERCIANTES UNIDOS 
COMERCIALES S.A.
COMERCIALIZADORA LA BOMBITA
COMERCIAL DE NEUMATICOS
COMERCIANTES S.A.
si quieres encontrar por ejemplo el registro de "la bombita" que es lo que se queda más grabado, tienes que escribir "COMERCIALIZADORA L" para que llegues al resultado. En cambio con el otro esquema basta que pongas "bombi", "bom" o similar y te llevará mucho más rápido. Además de evitamos los "typos" dijeran los gringos como:

Código:
"COMERSIALISADORA LA BOMBITA"
Suponiendo que algun operador iletrado lo haya dado de alta asi...con la búsqueda incremantal, ¿Sabes cuando lo encontrarías?...claro, a menos que lo escribas con las mismas faltas.

Solo un apunte.
__________________
AKA "El animalito" ||Cordobés a mucha honra||
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 incremental con ComboBox Lenny Varios 2 18-05-2010 01:02:34
busqueda incremental con mysql schaka SQL 2 09-02-2008 04:56:06
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


La franja horaria es GMT +2. Ahora son las 20:12:58.


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