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)
-   -   like no funciona ! (https://www.clubdelphi.com/foros/showthread.php?t=8415)

dmasson 22-03-2004 00:46:46

like no funciona !
 
Hola gente del foro, estoy desarrollando una aplicación en delphi6 con una DB access '97, en un query pongo una consulta de estre tipo:

SELECT RAZ_CLI,CUI_CLI FROM "D:\DATABASE\CLIENTES.DBF"
WHERE RAZ_CLI like :Razon

y solo devuelve resultado si Razon es exactamente igual a RAZ_CLI, funciona como si el operador fuera =, aclaro que el parámetro se lo paso con un * al final de la cadena

desde ya gracias

marcoszorrilla 22-03-2004 08:11:11

Prueba con % (es el signo de porcentaje).

Un Saludo.

Jvilomar 22-03-2004 17:14:57

HOLA..

como pasas el parametro? desde un Edit? si es asi prueba esto

with miQuery do
Begin
Close; // cierras el query
with sql do //Propiedad SQL del Query
begin
Clear; //Limpias El Query y añades la Sentencia SQL
add('SELECT RAZ_CLI,CUI_CLI');
add('FROM "D:\DATABASE\CLIENTES.DBF"');
add('WHERE RAZ_CLI like' +#39+'%'+edit1.text+#39+'%');
End;
Open; //Abres El query
End;

espero y te sirva.....

delphi.com.ar 22-03-2004 17:16:45

Cita:

Empezado por Jvilomar
add('WHERE RAZ_CLI like' +#39+'%'+edit1.text+#39+'%');

Me parece que queda un % fuera de las comillas

Algo similar a eso:
Código:

add('WHERE RAZ_CLI LIKE' + QuotedStr(Edit1.text + '%'));
Saludos!

Jvilomar 22-03-2004 17:25:36

:p cierto delphi.ar la ultima linea del add esta al reves

esta es la linea correcta....

add('WHERE RAZ_CLI like' +#39+'%'+edit1.text+'%'+#39);

aunque no habia visto esa variable QuotedStr....

Voy a investigar a ver que hace.....

delphi.com.ar 22-03-2004 17:30:21

Cita:

Empezado por Jvilomar
aunque no habia visto esa variable QuotedStr....

QuotedStr es una función que prepara un string con comillas en los bordes, y si encuentra una comilla dentro de la cadena, la duplica como para que no nos produzca un error del tipo "Unterminated String" o similar.

Saludos

Jvilomar 22-03-2004 17:33:14

gracias Delphi....

De todos modos ya he visto la ayuda de delphi....

Voy a tener que darle mas a F1 :D

marto 22-03-2004 21:45:40

Solo aportar un pequeño detalle. Es aconsejable evitar en la medida de lo posible montar el SQL al vuelo. En vez de ello es mejor declarar parametros (tal y como se apuntaba en el primer mensaje) y después asignarles el valor deseado. Creo que es mejor esta técnica por cuatro razones:

1.- Evita agujeros de seguridad mediante ataques de SQL Injection
2.- Si trabajamos con un SGBD decente, la query quedará preparada en el servidor, con lo que si se tiene que ejecutar más de una vez, aunque cambien los parametros, su velocidad será mucho mayor.
3.- A mi juicio el código queda mucho más legible.
4.- La VCL se encarga de escapar aquellos caracteres "extraños" (', ", \, ;, ...) que pueda introducir el usuario.

En el caso que se expone, yo dejaria el código SQL tal y como ha indicado dmasson al principio. En el evento que tiene que abrir la consulta, pondría el siguiente código:
Código:

Query1.Close;
Query1.ParamByName('RAZON').AsString := Edit1.Text + '%';
Query1.Open;


dmasson 23-03-2004 13:28:18

Funcionó !
 
Gracias a todos !, funcionaron todas las opciones

saludos

delphi.com.ar 23-03-2004 14:10:50

Cita:

Empezado por marto
4.- La VCL se encarga de escapar aquellos caracteres "extraños" (', ", \, ;, ...) que pueda introducir el usuario.

A mi entender, esta parte tambien la maneja el motor. La VCL solo le pasa los valores de los parámetros en forma estandard.

PD: Yo también soy partidario de usar parámetros. ;)


La franja horaria es GMT +2. Ahora son las 09:27:53.

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