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. |
Hola Lucas.
Reemplazá la consulta por:
Saludos. |
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'); |
Cita:
|
Ok, gracias voy a intentarlo.
Saludos. |
Hola
mmmmmm
Saludos |
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. |
Cita:
¿ Podrías poner el código del evento OnChange tál como lo escribiste ? Saludos. |
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
Sabes lo que es concatenar?. Saludos |
Cita:
Copia y pegá esta línea tal cuál está.
A mí me funciona perfectamente. Saludos. |
Hola ecfisa, muchas gracias, volví a escribir el código tal cual me dijiste y ahora funciona muy bien.
Nuevamente gracias y saludos. |
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. |
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í |
Cita:
¿ Se te ocurre alguna idea de como lo han implementado ? Por que hasta donde he probado las busquedas incrementales son bastante ineficientes... Saludos. |
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 Código:
"COMERSIALISADORA LA BOMBITA" Solo un apunte. |
La franja horaria es GMT +2. Ahora son las 09:39:35. |
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