PDA

Ver la Versión Completa : consulta con like


ramphi
21-09-2008, 18:21:33
hola gente como estan, bien
mi problema es el siguiente estoy usando una base de datos en acces conectado con adoconnection y estoy usando un ado query para filtrar el contenido osea que solo apareca los datos que el usuario quiere.

por ejempo, del campo nombre los registros que contenga "maria"

tengo un combobox por donde expesifico el campo donde de va a buscar y un edit donde se pondra el dato a buscar y dice k hay problema en la sysntaxis en 'nombres' like '%maria%' , prove esta sentencia en una base de datos en sql server y funciono.

este es nu codigo

procedure TForm1.Button1Click(Sender: TObject);
VAR consulta: string;
begin consulta:= 'SELECt * FROM tesis WHERE ' + quotedstr(combobox1.text)+' LIKE '+ quotedstr('%'+edit1.Text+'%');
datamodule2.ADOQuery1.Close;
datamodule2.ADOQuery1.SQL.Add(consulta);
datamodule2.ADOQuery1.Open;
end;

que estoy haciendo mal

salu2.

marcoszorrilla
21-09-2008, 18:37:03
En Access el comodín a utilizar es el asterisco * y no el porcentaje %.

Un Saludo.

ramphi
22-09-2008, 17:17:56
En Access el comodín a utilizar es el asterisco * y no el porcentaje %.

Un Saludo.


Ok Gracias

ramphi
22-09-2008, 23:15:53
bueno ahora me da otro error

despues de corregir lo de los % me seguia dando error de syntaxis y vi que ne el mensaje de error me ponia unas comillas de mas entonces retire el quotedstr() y el mensaje siguiente es

falta operador en 'NOMBRES like *Maria*' en la expresion
SELECT * FROM TESIS WHERE NOMBRES LIKE *MARIA*

que me faltaria por mas que he intentado no le encuentro nada

Código Delphi [-] (http://www.clubdelphi.com/foros/#)procedure TForm1.Button1Click(Sender: TObject);
VAR consulta: string;
begin consulta:= 'SELECt * FROM tesis WHERE ' + combobox1.text+' LIKE '+ '*'+edit1.Text+'*';
datamodule2.ADOQuery1.Close;
datamodule2.ADOQuery1.SQL.Add(consulta);
datamodule2.ADOQuery1.Open;
end;

roman
22-09-2008, 23:30:45
y vi que ne el mensaje de error me ponia unas comillas de mas

Y, ¿cuál era ese mensaje de error?

Por otro lado, lo que comenta Marcos es válido para consultas hechas desde el mismo Acces, pero según acabo de probar, si la consulta es desde Delphi con un ADOQuery, se usan %, como en otras bases.

// Saludos

ramphi
22-09-2008, 23:44:35
Y, ¿cuál era ese mensaje de error?

Por otro lado, lo que comenta Marcos es válido para consultas hechas desde el mismo Acces, pero según acabo de probar, si la consulta es desde Delphi con un ADOQuery, se usan %, como en otras bases.

// Saludos


el mensaje de error es falta operador en Nombres like *maria*


y por otra parte cuando coloco el % me da error de syntaxis, :confused:

salu2

Faust
23-09-2008, 00:47:34
En Access se utiliza como comodines los mismos caracteres que en ms-dos el asterisco (*) para un conjunto de caracteres y la interrogación (?) para un caracter, en Oracle p. ej. es porcentaje (%) para un conjunto de caracteres y guión bajo (_) para un caracter, esa es la diferencia.

Caro
23-09-2008, 03:08:55
Hola ramphi, como te dice Roman desde Access si funciona con * pero desde delphi tienes que hacerlo con %, por lo que veo tu error estaba en el campo que le pasas como parametro ya que no tiene que ser con comillas.


consulta:= 'SELECt * FROM tesis WHERE ' + quotedstr(combobox1.text)+' LIKE '+ quotedstr('%'+edit1.Text+'%');


Tu consulta debería quedar así:


consulta:= 'SELECt * FROM tesis WHERE '+combobox1.text+' LIKE '+QuotedStr('%'+edit1.Text+'%');
datamodule2.ADOQuery1.Close;
datamodule2.ADOQuery1.SQL.Clear;//No te olvides limpiar
datamodule2.ADOQuery1.SQL.Add(consulta);
datamodule2.ADOQuery1.Open;


Saluditos

ramphi
23-09-2008, 15:18:45
Hola ramphi, como te dice Roman desde Access si funciona con * pero desde delphi tienes que hacerlo con %, por lo que veo tu error estaba en el campo que le pasas como parametro ya que no tiene que ser con comillas.



Tu consulta debería quedar así:

Código Delphi [-] (http://www.clubdelphi.com/foros/#) consulta:= 'SELECt * FROM tesis WHERE '+combobox1.text+' LIKE '+QuotedStr('%'+edit1.Text+'%'); datamodule2.ADOQuery1.Close; datamodule2.ADOQuery1.SQL.Clear;//No te olvides limpiar datamodule2.ADOQuery1.SQL.Add(consulta); datamodule2.ADOQuery1.Open;


Saluditos


pues corregi eso y me dice que hoy error en syntaxis

y cuando quito los dos quotedstr() me da error de "falta operador"

salu2

Lepe
23-09-2008, 15:31:01
y ahora llega el novato de access diciendo.... ¿no era con comillas dobles? usea:


SELECT * FROM tesis WHERE campo LIKE "%MARIA%"




consulta:= 'SELECt * FROM tesis WHERE ' + quotedstr(combobox1.text)+' LIKE "%' + edit1.Text+'%"';


saluditos.

ramphi
24-09-2008, 13:29:44
y ahora llega el novato de access diciendo.... ¿no era con comillas dobles? usea:

Código SQL [-] (http://www.clubdelphi.com/foros/#)SELECT * FROM tesis WHERE campo LIKE "%MARIA%"



Código Delphi [-] (http://www.clubdelphi.com/foros/#)consulta:= 'SELECt * FROM tesis WHERE ' + quotedstr(combobox1.text)+' LIKE "%' + edit1.Text+'%"';


saluditos.



bueno de esta forma no me da error pero no pasa nada, en la dbgird siguen los mismo datos y le agrego un refresh y nada, hay algo mas que agregar??


procedure TForm1.Button1Click(Sender: TObject);
VAR consulta: string;
begin consulta:= 'SELECt * FROM tesis WHERE '+quotedstr(combobox1.Text)+' LIKE "'+edit1.Text+'%"';
datamodule2.ADOQuery1.Close;
datamodule2.ADOQuery1.SQL.Clear;
datamodule2.ADOQuery1.SQL.Add(consulta);
datamodule2.ADOQuery1.Open;
dbgrid1.Refresh;
end;

Lepe
24-09-2008, 14:20:43
Pues la verdad, deberías ver algún resultado o ver el grid vacio. Pregunta obligada: ¿seguro que el dbgrid está asociado al mismo adoquery? (un error tonto es muy común en estos casos)

en la base de datos, "maria" estará escrita en mayúsculas ¿verdad?, y sin tilde ¿siii?

para las mayúsculas puedes usar:

select * from tabla where Upper(campo) like "%MARIA%"


Saludos

Caro
24-09-2008, 14:48:11
Hola, yo siempre lo hice comilla simple y me ha funcionado acabo de hacer la prueba con comilla doble y también funciona. A parte de lo que te dice el amigo Lepe debes quitar el QuotedStr de tu campo.


consulta:= 'SELECt * FROM tesis WHERE '+quotedstr(combobox1.Text)+' LIKE "'+edit1.Text+'%"';


Saluditos

ramphi
25-09-2008, 22:30:36
gracias ya pude resolver el problema, habia una mala conexion con el query y las comillas del campo, :p

salu2