Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Buscada Multiple, Buscar dato en varios campos (https://www.clubdelphi.com/foros/showthread.php?t=77996)

negrokau 12-03-2012 12:15:13

Buscada Multiple, Buscar dato en varios campos
 
hola a todos, necesito hacer una busqueda multiple como por ejemplo por CODIGO, CATEGORIA Y DESCRIPCION, que me filtre los tres campos a vez ej:(todos los CODIGOS=que contengan 1, CATEGORIA=cigarrillos y DESCRIPCION=marlboro), uso el LIKE y funciona independiente en los 3 pero no como el ejemplo. agradezco su comentario, gracias....

ElDioni 12-03-2012 13:11:14

Hola, si lo que quieres es hacer una consulta que te filtre por las condiciones que comentas debería ser algo así:
Código SQL [-]
SELECT * FROM productos WHERE codigo=1 AND categoria='cigarrillos' AND descripción='Marlboro'
o, usando like, así:

Código SQL [-]
SELECT * FROM productos WHERE codigo=1 AND categoria LIKE '%cigarrillos%' AND descripción LIKE '%Marlboro%'

Según que motor de base de datos utilices los comodines del LIKE serán '%' o '*'.

Saludos.

negrokau 12-03-2012 13:19:22

CODIGO, CATEGORIA Y DESCRIPCION los tengo en edit separados para la busqueda, funcionara igual la opcion que me diste? xq como entiendo el LIKE se configura en cada edit, me explico?

ElDioni 12-03-2012 13:23:42

Hola,

si los tienes en edits separados y quieres utilizar los valores de los edits para montar una consulta en un Adoquery por ejemplo sería algo así:

Código Delphi [-]
adoquery1.close;
adoquery1.SQL.Text:='SELECT * FROM productos WHERE codigo='+edit1.text+' AND categoria LIKE '+quotedstr('%'+edit2.text+'%')+' AND descripcion LIKE '+quotedstr('%'+edit3.text+'%');
adoquery1.open;

No se si así te lo ves claro, también puedes hacerlo pasando como parametros los edit, tema que se ha tratado bastante en los foros.

Saludos.

negrokau 12-03-2012 14:11:48

Cita:

Empezado por ElDioni (Mensaje 427401)
Hola,

si los tienes en edits separados y quieres utilizar los valores de los edits para montar una consulta en un Adoquery por ejemplo sería algo así:

Código Delphi [-]
adoquery1.close;
adoquery1.SQL.Text:='SELECT * FROM productos WHERE codigo='+edit1.text+' AND categoria LIKE '+quotedstr('%'+edit2.text+'%')+' AND descripcion LIKE '+quotedstr('%'+edit3.text+'%');
adoquery1.open;


No se si así te lo ves claro, también puedes hacerlo pasando como parametros los edit, tema que se ha tratado bastante en los foros.

Saludos.

que significa "quotedstr"?

oscarac 12-03-2012 14:40:48

la funcion quotedstr encierra entre comillas simples lo que pases como parametro

ecfisa 12-03-2012 17:57:39

Cita:

Empezado por ElDioni (Mensaje 427401)
también puedes hacerlo pasando como parametros los edit, tema que se ha tratado bastante en los foros.

Estoy totalmente de acuerdo con esa opción, es mas legible y lo más importante: Muchísimo mas segura.
Código Delphi [-]
  with ADOQuery1 do
  begin
    Close;
    SQL.Clear;
    SQL.Add('SELECT * FROM PRODUCTOS ');
    SQL.Add('WHERE CODIGO LIKE :COD AND CATEGORIA LIKE :CAT AND DESCRIPCION LIKE :DES');
    Parameters.ParamByName('COD').Value:= '%'+Edit1.Text+'%';
    Parameters.ParamByName('CAT').Value:= '%'+Edit2.Text+'%';
    Parameters.ParamByName('DES').Value:= '%'+Edit3.Text+'%';
    Open
  end

Saludos.

ElDioni 12-03-2012 18:23:12

Hola ecfisa,

solo una pregunta, en el ejemplo que has puesto con los parametros, ¿habría que poner el quotedstr para que los pase con comillas?. Es decir:

Código Delphi [-]
with ADOQuery1 do   
  begin     
    Close;     
    SQL.Clear;     
    SQL.Add('SELECT * FROM PRODUCTOS ');     
    SQL.Add('WHERE CODIGO LIKE :COD AND CATEGORIA LIKE :CAT AND DESCRIPCION LIKE :DES');        
    Parameters.ParamByName('COD').Value:=quotedstr('%'+Edit1.Text+'%');      
    Parameters.ParamByName('CAT').Value:=quotedstr('%'+Edit2.Text+'%');     
    Parameters.ParamByName('DES').Value:=quotedstr('%'+Edit3.Text+'%');     
    Open;   
  end;
¿o como lo has puesto tú se pasarían ya con comillas directamente?.

Saludos.

ecfisa 12-03-2012 20:12:31

Cita:

Empezado por ElDioni (Mensaje 427439)
Hola ecfisa,

solo una pregunta, en el ejemplo que has puesto con los parametros, ¿habría que poner el quotedstr para que los pase con comillas?.

Hola ElDioni.

No, utilizando parámetros no es necesario el uso de la función QuotedStr.

Saludos.


La franja horaria es GMT +2. Ahora son las 16:27:05.

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