Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   SQL (https://www.clubdelphi.com/foros/forumdisplay.php?f=6)
-   -   Duda sobre comodines en consulta (https://www.clubdelphi.com/foros/showthread.php?t=92536)

The Cid James 22-11-2017 16:17:34

Duda sobre comodines en consulta
 
Tengo la siguiente consulta y quiero usar comodines en el parametro 'idp' para mostrar todos los campos en cuanto se habra la consulta, ahora bien se que si uso like el comodin para esto es '%' pero cuando es '=' (igual) no me lo toma asi que no sabria como poder hacer esto, existe una forma de usar un comodin usando el signo igual o no?
Código SQL [-]
SELECT   
producto.id_producto,   
producto.Nombre,   
producto.Descripcion,   
producto.Precio_com,
producto.Stock,
 producto.stock_minimo,
producto.precio_vent,
producto.id_categoria_producto 
FROM  
producto 
WHERE  
producto.estado = 1
AND  
producto.id_categoria_producto = :idp
AND
producto.Nombre like :nomp

duilioisola 22-11-2017 16:35:49

- Sabes como usar el LIKE con el comodín %.
- Quieres utilizar el comodín en una parte donde no se utiliza LIKE.

Eso no se puede.
Puedes poner algo así como
Código SQL [-]
producto.id_categoria_producto like '%' || :idp || '%'
pero si el id es un número, no creo que tenga mucho sentido...

The Cid James 22-11-2017 17:08:43

Cita:

Empezado por duilioisola (Mensaje 522750)
- Sabes como usar el LIKE con el comodín %.
- Quieres utilizar el comodín en una parte donde no se utiliza LIKE.

Eso no se puede.
Puedes poner algo así como
Código SQL [-]producto.id_categoria_producto like '%' || :idp || '%'

pero si el id es un número, no creo que tenga mucho sentido...

uff, no se me ocurre como mostrar esa consulta entonces porque despues si o si necesito filtrarla por el otro parametro, aunque no entiendo porque no tiene sentido si es un numero :(

aposi 22-11-2017 17:21:03

Prueba a convertir en el where el campo numerico a string y utiliza el LIKE

Código SQL [-]
SELECT    producto.id_producto,    producto.Nombre,    producto.Descripcion,
    producto.Precio_com, producto.Stock,  producto.stock_minimo, producto.precio_vent, producto.id_categoria_producto 
 FROM   producto  
WHERE   
producto.estado = 1
 AND  
 cast(producto.id_categoria_producto as varchar(10)) LIKE :idp
 AND
 producto.Nombre like :nomp

The Cid James 22-11-2017 18:02:55

Nop supongo que solo se puede usar en el select la verdad que aunque lo conocia en la teoria nunca lo habia usado

ecfisa 22-11-2017 18:48:35

Hola.
Cita:

Empezado por The Cid James (Mensaje 522756)
..., aunque no entiendo porque no tiene sentido si es un numero :(

Por que por ejemplo, ¿ A que debería ser parecido 65 ?
¿ a 56 por que tiene ambos dígitos y es fácil de confundir ?
¿ a 64 ó 66 por que son números cercanos ?
¿ a 560 o 650 por que aparecen los dígitos 6 y 5 ?
¿ ... ?

Saludos :)

The Cid James 23-11-2017 06:33:04

Gracias gente por aclararme las dudas. Pues nada a ver como lo soluciono por codigo o que se me ocurre

duilioisola 23-11-2017 09:20:22

Cita:

Empezado por The Cid James (Mensaje 522797)
Gracias gente por aclararme las dudas. Pues nada a ver como lo soluciono por codigo o que se me ocurre

¿Sabes qué es lo que quieres?
Creo que de los que comentamos ninguno sabemos bien que es lo que deseas conseguir.
Si das algún ejemplo con valores, quizás logremos comprender cómo quires utilizar el LIKE en un valor numérico...

The Cid James 24-11-2017 10:46:53

Lo que quiero es lo siguiente.
Como habran notado es la consulta de la tabla productos
El primer WHERE
Hace referencia a "estado", este es el que me dice si hay stock o no. El segundo "id_categoria_producto" es el id de la categoria a los productos y en tercelor es para la busqueda por nombre del producto.

Lo que intento hacer es:
1-Cuando se habra en tform donde esta la consulta muestre todos los productos. (Esta parte es la que tengo problemas por no poder usar comodin con valores numericos con el igual)
2-Poder filtrar los productos por nombre o categoria (en el caso de la categoria lo tengo asociado a DBLookupCombobox)

Por lo menos todo lo demas me funciona bien

Casimiro Notevi 24-11-2017 11:01:54

Sigue sin entenderse qué quieres, ni qué problema tienes.

ecfisa 24-11-2017 13:21:39

Hola.
Cita:

Empezado por The Cid James (Mensaje 522870)
... (Esta parte es la que tengo problemas por no poder usar comodin con valores numericos con el igual)..

Y esa parte es la que debe describir con mas claridad por que no entendemos que desea hacer ni cuál es el problema.

Saludos :)

duilioisola 24-11-2017 14:55:51

Cita:

Empezado por The Cid James (Mensaje 522870)
Lo que intento hacer es:
1-Cuando se habra en tform donde esta la consulta muestre todos los productos. (Esta parte es la que tengo problemas por no poder usar comodin con valores numericos con el igual)
2-Poder filtrar los productos por nombre o categoria (en el caso de la categoria lo tengo asociado a DBLookupCombobox)

Creo entender lo que quieres.

Cuando se abre el TForm el SQL debe ser el que muestra todos los productos en stock
Código SQL [-]
SELECT   
producto.id_producto, producto.Nombre, producto.Descripcion, producto.Precio_com, producto.Stock, producto.stock_minimo, 
producto.precio_vent, producto.id_categoria_producto 
FROM producto 
WHERE  
producto.estado = 1

Cuando quiera filtrar, obtienes el filtro (nombre o id) cierras el query, modificas el SQL según quieras filtrar por ID del pructo o por nombre y lo vuelves a abrir:
Código Delphi [-]
procedure FiltrarPorNombre(Nombre : string);
begin
  with QueryProductos do
  begin
     Close;
     SQL.Clear;
     SQL.Add(' SELECT ');
     SQL.Add(' producto.id_producto, producto.Nombre, producto.Descripcion, producto.Precio_com, producto.Stock, producto.stock_minimo,  ');
     SQL.Add(' producto.precio_vent, producto.id_categoria_producto  ');
     SQL.Add(' FROM producto  ');
     SQL.Add(' WHERE   ');
     SQL.Add(' producto.estado = 1 ');
     SQL.Add(' AND producto.Nombre like :nomp ');
     Params.ByName('NOMP').AsString := '%' + Nombre + '%';
     Open;
  end;
end;

procedure FiltrarPorId(Id : string);
begin
  with QueryProductos do
  begin
     [...]
     SQL.Add(' AND producto.ID = :ID ');
     Params.ByName('ID').AsInteger := id;
     Open;
  end;

duilioisola 24-11-2017 14:58:37

Según el componentes que utilices puedes utilizar la propiedad Filter

Mira este hilo: http://www.clubdelphi.com/foros/showthread.php?t=69726

Código Delphi [-]
procedure TForm1.FiltrarTabla(Valor: integer);
begin
  with Productos do
  begin
    Filtered:= False;
    Filter:= 'ID= ' + IntToStr(Valor);
    Filtered:= True;
  end;
end;

The Cid James 29-11-2017 01:20:55

Perdon por no responder antes, he tenido un problema con el modem y tuve que esperar hasta que me manden uno nuevo

Cita:

Empezado por ecfisa (Mensaje 522874)
Hola.

Y esa parte es la que debe describir con mas claridad por que no entendemos que desea hacer ni cuál es el problema.

Saludos :)

Cita:

Empezado por Casimiro Notevi (Mensaje 522872)
Sigue sin entenderse qué quieres, ni qué problema tienes.

No sabria como explicarlo de la mejor manera, necesitaba que se muestren todos los productos al abrir el form y despues ir filtando por los parametros (al no poder usar comodin en el =) no lograba hacer que se muestren todos los registros de la tabla al abrir el form,

Cita:

Empezado por duilioisola (Mensaje 522876)
Según el componentes que utilices puedes utilizar la propiedad Filter

Mira este hilo: http://www.clubdelphi.com/foros/showthread.php?t=69726

Código Delphi [-]
procedure TForm1.FiltrarTabla(Valor: integer);
begin
  with Productos do
  begin
    Filtered:= False;
    Filter:= 'ID= ' + IntToStr(Valor);
    Filtered:= True;
  end;
end;

Al final resolvi esto usando el like en
Código SQL [-]
producto.id_categoria_producto like  :idp
Y al abrir el form use el comodin
Código Delphi [-]
fmodulo.qProductos.ParamByName('idp').AsString := '%';

Evitando que el campo con el que se iba a filtrar sea nulo muestra todos los registros de la tabla que necesito

Gracias por su tiempo y la ayuda a todos :D voy a probar los métodos que me pasaste duilioisola para otra cosa que tengo pensado a ver como me va


La franja horaria es GMT +2. Ahora son las 10:53:52.

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