Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   SQL (https://www.clubdelphi.com/foros/forumdisplay.php?f=6)
-   -   Crear una consulta filtrada por uno o más parametros (https://www.clubdelphi.com/foros/showthread.php?t=64407)

lefarre 31-03-2009 16:48:46

Crear una consulta filtrada por uno o más parametros
 
Hola, estoy lidiando con una cosulta sql y quisiera ver si podrian hecharle una miradita para ver que esta mal.
Lo que necesito es poder mostrar en un dbgrid los articulos de la tabla articulos filtrados por categoria, subcategoria y proveedor.
para despues poder imprimirlos o sea si se necesita un determinado proveedor se puede imprimir ese con todos sus articulos y ademas poder imorimir un categoria independiente del proveedor que sea.
Espero haberme explicado.
Para ello untilizo unos dbcombo para asignarle los parametros y un debedit en lo que sea la descrición.
Paso la consulta
dm1.QBA.Active:=false;
JvDBGrid1.DataSource:= DataSource1;
dm1.QBA.SQL.Clear;
dm1.QBA.SQL.Add('select * from articulos');
dm1.QBA.SQL.Add('WHERE No IN(:cambuscar, AND :categoria, AND :subcategoria, AND :proveedor)order by descripcion');
dm1.QBA.Parameters.ParamByName('cambuscar').Value:= '%'+ lowercase(cambuscar.Text)+'%';
dm1.QBA.Parameters.ParamByName('categoria').Value := categoria.Text;
dm1.QBA.Parameters.ParamByName('subcategoria').Value := subcategoria.Text;
dm1.QBA.Parameters.ParamByName('proveedor').Value:= proveedor.Text;
dm1.QBA.Active:=true;
if dm1.QBA.IsEmpty then showmessage('No se encuentra en la base de datos');
cambuscar.SetFocus;
Desde ya muchas gracias.

Caro 31-03-2009 16:57:14

Hola, cuando utilizas el In no debes añadir el AND, solo debe estar separado por comas y lo que se esta pregunta es si el registro con el campo No esta en el conjunto que le has dado, pregunta tu proveedor, categoria, subcategoría esta en tu campo No :confused:

Saluditos

lefarre 31-03-2009 17:44:49

Ahora no me seleccioan los dbcombo un valor
 
Gracias ante todo por tu pronta respuesta.Asi quedo, ya que el campo "N"o no era el que necesitaba buscar sino más bien el campo "descripción".
La idea seria poder encontrar esa descripcion con esos paramentros.
¿Esta esta descripcion en la categoria tal con la subcategoria tal y el proveedor tal.?
Ahora me sale siempre el mensaje que no se encontro nada pero además no puedo seleccionar los datos en los dblookupcombo.
dm1.QBA.Active:=false;
JvDBGrid1.DataSource:= DataSource1;
dm1.QBA.SQL.Clear;
dm1.QBA.SQL.Add('select * from articulos');
dm1.QBA.SQL.Add('WHERE descripcion IN(:cambuscar,:categoria,:subcategoria,:proveedor)order by descripcion');
dm1.QBA.Parameters.ParamByName('cambuscar').Value:= '%'+ lowercase(cambuscar.Text)+'%';
dm1.QBA.Parameters.ParamByName('categoria').Value := categoria.Text;
dm1.QBA.Parameters.ParamByName('subcategoria').Value := subcategoria.Text;
dm1.QBA.Parameters.ParamByName('proveedor').Value:= proveedor.Text;
dm1.QBA.Active:=true;
if dm1.QBA.IsEmpty then showmessage('No se encuentra en la base de datos');
cambuscar.SetFocus;
Desde ya muchas gracias.Saludos a todos.

ContraVeneno 31-03-2009 18:48:56

Mas bien lo que te hace falta es leer un poco más sobre SQL...

Código SQL [-]
Select TusCampos
From TuTabla
Where Descripcion like :cambuscar
and Categoria = :Categoria
and SubCategoria = :Categoria
and Proveedor = :Proveedor

julyus 31-03-2009 18:58:44

mas claro no canta un gallo:eek:

lefarre 31-03-2009 21:50:41

Muchas gracias y es algo que ya lo estoy haciendo
 
Gracias ante todo por aclararme dudas. Ya probe la consulta en la base y anda.
Solo me surge un problema y es que en la tabla articulos guardo los codigos de las categorias, subcateg y proveedores por medio de un lookupcombo que muestra la descripcion y guarda el codigo.
El tema es que no logro que me busque desde le form con los lookupcombo de la misma manera. (no se que propiedad debo usar.)
La idea es no tener que recordar los codigos y poder seleccionar la descripcion.

Probe con Text y con keyfield.

El codigo esta quedando asi.

Código SQL [-]
dm1.QBA.Active:=false;
JvDBGrid1.DataSource:= DataSource1;
dm1.QBA.SQL.Clear;
dm1.QBA.SQL.Add('select * from articulos');
dm1.QBA.SQL.Add('where lower(descripcion) like :cambuscar and codcateg = :categoria and codsubcateg = :subcategoria and codprov = :proveedor order by descripcion');
dm1.QBA.Parameters.ParamByName('cambuscar').Value:= '%'+ lowercase(cambuscar.Text)+'%';
dm1.QBA.Parameters.ParamByName('categoria').Value := categoria.Text;
dm1.QBA.Parameters.ParamByName('subcategoria').Value := subcategoria.KeyField;
dm1.QBA.Parameters.ParamByName('proveedor').Value:= proveedor.KeyField;
dm1.QBA.Active:=true;
if dm1.QBA.IsEmpty then showmessage('No se encuentra en la base de datos');
cambuscar.SetFocus;




PD: Agradecere link de manual buen manual sql mientras tanto empese por alguno que encotre en google.

ContraVeneno 31-03-2009 22:10:29

¿los loockUpCombBox son los que vienen en las JEDI?

Si es así, entonces es con "KeyValue".

lefarre 31-03-2009 23:25:54

No hay caso che
 
Prove con los lookup combo de delphi y los de jedi con la propiedad KeyValue, Text, KeyField y ListField.
No logro que tome el valor del combo como parametro.
Desde ya muchas gracias.

ContraVeneno 31-03-2009 23:47:31

Entonces hay otra cosa que no estas haciendo correctamente. Yo te puedo asegurar, que esto funciona perfectamente:

Código Delphi [-]
with UnAdoQuery do begin
 if active then close;
 SQL.Clear;
 SQL.Add('Select Nombre');
 SQL.Add('From Cliente');
 SQL.Add('Where Clave = :Clave');
 Parameters.ParamByName('Clave').Value := cmbClientes.KeyValue; //TjvDBLoockUpCombo
 Open;
 Showmessage(FieldByName('Nombre').AsString);
end; //with

Prueba a hacer esto:
Showmessage(Proveedor.KeyValue);
para ver que valor te muestra.

lefarre 01-04-2009 01:54:28

Solucionado
 
Muchisimas Gracias :)
Me sirvio mucho tu ayuda para corroborar los valores de los parametros y detectar el error.
Error cometido en el Dataset que no apuntaba a QBA sino al TADO de la tabla.
Cambiando eso funciona perfectamente.
Saludos y nuevamente muchas gracias.


La franja horaria es GMT +2. Ahora son las 09:44:08.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi