Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   SQL (https://www.clubdelphi.com/foros/forumdisplay.php?f=6)
-   -   Consulta select con % (https://www.clubdelphi.com/foros/showthread.php?t=34694)

edelphi 17-08-2006 22:57:02

Consulta select con %
 
bueno holas a todos los foristas mi duda es la siguiente:

en un query pongo esta consulta y me funciona muy bien, pero lo que deseo es poner el "%" despues del like para que me hag una consulta sin que importe el comienzo de la condicion, espero su respuesta.

Código Delphi [-]
ADOQ.SQL.Text:='Select * from SANCIONES where NOMBRE like'''+edit1.text+'%''';

Alejandro73 17-08-2006 23:10:07

Prueba usando esta sentencia
 
Código Delphi [-]
ADOQUERY.SQL.Add('Select * From NTabla');
ADOQUERY.SQL.Add('where ncampo like:variable ');
ADOQUERY.ParamByName('variable').AsString:='%'+Edit1.Text+'%';
ADOQUERY.Open;

dec 17-08-2006 23:13:35

Hola,

Abrá tantas maneras como la imaginación de cada quién, ahí va una que creo puede servir:

Código Delphi [-]
  ADOQ.SQL.Text := 'select * from SANCIONES where NOMBRE like %'+ edit1.Text +'%';

ContraVeneno 18-08-2006 01:08:27

Cita:

Empezado por dec
Hola,

Abrá tantas maneras como la imaginación de cada quién, ahí va una que creo puede servir:

Código Delphi [-] ADOQ.SQL.Text := 'select * from SANCIONES where NOMBRE like %'+ edit1.Text +'%';

Mmmm, creo que eso te marcaría un error... debería ser:
Código Delphi [-]
  ADOQ.SQL.Text := 'select * from SANCIONES where NOMBRE like ''%'+ edit1.Text +'%''';

dec 18-08-2006 02:14:27

Hola,

No sé yo... en las pruebas que hize (visualizar la cadena de la consulta para ver si todo estaba en su sitio) funcionó, pero, oyes, ¡nadie es perfecto! :D

Lepe 18-08-2006 09:36:36

y yo... por incordiar un poco más... pregunto: ¿no es engorroso usar ese método de tantas comillas? ¿no os produce errores "tontos" en ejecución?

Yo prefiero:
Código Delphi [-]
ADOQ.SQL.Text := 'select * from SANCIONES where NOMBRE like ' +QuotedStr('%'+ edit1.Text +'%');

Saludos

ContraVeneno 18-08-2006 15:45:16

una vez que te acostumbras, no tiene porque pasarte ese tipo de errores. Para mi es mucho más facill poner ' '' '' ' que poner quotedstr. 6 caracteres son más rápidos de escribir que 8

:D

delphi.com.ar 19-08-2006 00:38:15

Solo un detalle:

Si haces una búsqueda sobre un campo de texto (varchar, text...) utilizando el comodín al final del texto, el motor podrá responder la consulta utilizando el índice. Pero si pones dos comodines al estilo: %texto%, el motor no podrá utilizar el índice, por lo tanto, si la tabla es muy extensa puede ser un proceso algo pesado y largo.

Saludos!

delphi.com.ar 19-08-2006 00:41:26

Cita:

Empezado por ContraVeneno
una vez que te acostumbras, no tiene porque pasarte ese tipo de errores. Para mi es mucho más facill poner ' '' '' ' que poner quotedstr. 6 caracteres son más rápidos de escribir que 8

Funciones como QuotedStr no solo evitan errores de programación, sino que también evita errores en tiempo de ejecución si el usuario utiliza una comilla en el texto ingresado. Además deja nuestro código inseguro a malintencionados que utilicen métodos de inyección de SQL.

Saludos!

ContraVeneno 19-08-2006 01:25:02

Muy cierto, es por eso que siempre utilizo la regla #34672 del decálogo de programación:

Controla todo lo que puedas controlar con los controles

Esto es, evitando que se escriba el apóstrofe, o más sencillo aún, solo permitir al control adminitir el número de caracteres definidos por el campo de búqueda.

Pero si comprendo perfectamente como la función qutoedstr te puede evitar problemas de inyección, cosa que no había reflexionado hasta este momento.

vtdeleon 19-08-2006 03:10:05

Cita:

Empezado por Contraveneno
Pero si comprendo perfectamente como la función qutoedstr te puede evitar problemas de inyección, cosa que no había reflexionado hasta este momento.

Ademas de Claridad y evitar confusion.

Saludos

Lepe 19-08-2006 10:41:48

... y yo que solo lo decía por incordiar un poco .... :D

Saludos compañeros.

edelphi 07-09-2006 20:19:23

gracias chikos me ayudaron en el problemita que tenia y ademas optimizaron mi codigo y claro que si valide la introduccion de datos a traves de los controles. gracias de nuevo:D

edelphi 06-02-2007 22:18:15

Ayuda
 
Compañeros regrese a preguntar por que ahora el problemita esta un poquito mas dificil

se trata de que el campo con el cual quiero hacer la consulta se pase desde una variable algo asi
Código Delphi [-]
filtro:='Select * from agenda where '''+lowercase(campo)+''' like '''+TXTbusca.text+'%'+'''';

donde campo es el campo que esta convirtiendose a minusculas y TXTbusca es el valor cone el cual se compara para hacer la consulta

esta consulta no me corre no se por que de seguro la posicion de los apostrofes esta mal por favor diganme como es la posicion correcta

maeyanes 06-02-2007 23:02:08

El problema es que el nombre de los campos no debe ir entre comillado...

Código Delphi [-]
filtro := 'Select * from agenda where ' + lowercase(campo) + ' like ''' + TXTbusca.text + '%''';

Ahora también podrías usar:

Código Delphi [-]
Filtro := Format('select * from agenda where %s like ''%s%%''', [lowercase(campo), TXTBusca.Text]);


Saludos...

edelphi 07-02-2007 00:32:44

amigo maeyanes probe los dos codigos que me mandaste pero ninguno me funciono me manda un mensaje de error diciendo error en sintaxis, por si acaso pueda servir estoy trabajando con mysql 5 y delphi 7 la conexion ado y bueno el problema mas que todo es al momento de mandar el campo por que si lo escribo de frente si me funciona de maravillas.

Espero les sirva el comentario para que me ayuden con mi problema gracias

pborges36 07-02-2007 17:46:41

asi es como deberia funcionar:

Código Delphi [-]
filtro := 'Select * from agenda where ' + lowercase(campo) + ' like '" + TXTbusca.text + '%"';
 
ADOQ.SQL.Text:=filtro;

ContraVeneno 07-02-2007 17:56:49

no creo que funcione, por la forma en que estan las comillas.

Ivanzinho 07-02-2007 18:01:31

Código Delphi [-]
filtro := 'Select * from agenda where ' + lowercase(campo) + ' like ' + QuotedStr(TXTbusca.text + '%');
ADOQ.SQL.Text:=filtro;

pborges36 09-02-2007 15:00:35

Cita:

Empezado por pborges36
asi es como deberia funcionar:


Código Delphi [-]
filtro := 'Select * from agenda where ' + lowercase(campo) + ' like '" + TXTbusca.text + '%"';

ADOQ.SQL.Text:=filtro;



:D Es verdad, eso es lo que queria escribir:

Código Delphi [-]
filtro := 'Select * from agenda where ' + lowercase(campo) + ' like "' + TXTbusca.text + '%"';
 
ADOQ.SQL.Text:=filtro;


La franja horaria es GMT +2. Ahora son las 22:28:20.

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