Club Delphi  
    Paypal   FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > SQL
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 22-05-2013
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 38
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola sac.

Si entendí bién lo que queres hacer, podrías hacer:
Código SQL [-]
SELECT *
FROM GENTE
WHERE NOMBRE = :PNOMBRE OR EDAD =:PEDAD OR LUGAR = :PLUGAR /* OR ... */
ORDER BY NOMBRE, EDAD, LUGAR /*, ...*/

Saludos.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #2  
Antiguo 22-05-2013
sac sac is offline
Miembro
 
Registrado: abr 2007
Posts: 109
Poder: 20
sac Va por buen camino
No anda

Ecfisa eso es lo que quisiera escribir pero no me lo toma
y parece poco eficiente tener 30 sql uno por cada campo que quisiera consultar.
que puede estar fallando porque es casi literal tu código al que pensé y escribi.
Responder Con Cita
  #3  
Antiguo 22-05-2013
Avatar de marcoszorrilla
marcoszorrilla marcoszorrilla is offline
Capo
 
Registrado: may 2003
Ubicación: Cantabria - España
Posts: 11.221
Poder: 10
marcoszorrilla Va por buen camino
Yo hago lo siguiente, un formulario con un Radiogroup para capturar lo que quiere el usuario:
Código Delphi [-]
procedure TfrDlgProductos.spbConsultaClick(Sender: TObject);
begin
  Case RdgProductos.ItemIndex of
  0:cListado:='Productos en Venta entre '  +DateToStr(DtpkIni.Date)+' y '+DateToStr(DtpkFin.Date);
  1:cListado:='Productos Reservados entre '+DateToStr(DtpkIni.Date)+' y '+DateToStr(DtpkFin.Date);
  2:cListado:='Productos Vendidos entre '  +DateToStr(DtpkIni.Date)+' y '+DateToStr(DtpkFin.Date);
  3:cListado:='Productos Devueltos entre ' +DateToStr(DtpkIni.Date)+' y '+DateToStr(DtpkFin.Date);   
  4:cListado:='Productos en Venta entre '  +DateToStr(DtpkIni.Date)+' y '+DateToStr(DtpkFin.Date)+' de '+DmProveedores.IBDtsProvNOMBRE.Value;
  5:cListado:='Productos Reservados entre '+DateToStr(DtpkIni.Date)+' y '+DateToStr(DtpkFin.Date)+' de '+DmProveedores.IBDtsProvNOMBRE.Value;
  6:cListado:='Productos Vendidos entre '  +DateToStr(DtpkIni.Date)+' y '+DateToStr(DtpkFin.Date)+' de '+DmProveedores.IBDtsProvNOMBRE.Value;
  7:cListado:='Productos Devueltos entre ' +DateToStr(DtpkIni.Date)+' y '+DateToStr(DtpkFin.Date)+' de '+DmProveedores.IBDtsProvNOMBRE.Value;
  8:cListado:='Productos en venta que han superado la fecha tope.';
  end;

Application.CreateForm(TfrConProductos, frConProductos);
frConProductos.ShowModal;
end;

Y luego en el formulario de consulta armo el SQL, según la opción seleccionada:
Código Delphi [-]
procedure TfrConProductos.FormActivate(Sender: TObject);
var
Sql1,Sql2:String;
begin
frConProductos.Caption:=cListado;

sql1:='select p.numero, p.codigo, p.descripcion, p.pvp, p.fventa, p.estado, P.pfinal,P.observaciones,'+
' R.numero, R.fentrega, R.codProveedor, R.Ftope, R.observaciones'+
' from productos P, Recepcion as R'+
' where P.numero = R.numero And Fentrega Between :F1 And :F2';

DmProveedores.IBDtsConProd.Close;
DmProveedores.IBDtsConProd.SelectSql.Clear;

  Case frDlgProductos.RdgProductos.ItemIndex of
  0:sql2:=' And Estado = 1';
  1:sql2:=' And Estado = 2';
  2:sql2:=' And Estado = 3';
  3:sql2:=' And Estado = 4';
  4:sql2:=' And Estado = 1 And CodProveedor = '+DmProveedores.IBDtsProvCODIGO.Value;
  5:sql2:=' And Estado = 2 And CodProveedor = '+DmProveedores.IBDtsProvCODIGO.Value;
  6:sql2:=' And Estado = 3 And CodProveedor = '+DmProveedores.IBDtsProvCODIGO.Value;
  7:sql2:=' And Estado = 4 And CodProveedor = '+DmProveedores.IBDtsProvCODIGO.Value;
  8:sql2:=' And Estado = 1 And fEntrega > :F3 ';
  end;

  if frDlgProductos.RdgProductos.ItemIndex < 8 then
  begin
  DmProveedores.IBDtsConProd.SelectSql.Text:=Sql1+sql2;
  DmProveedores.IBDtsConProd.ParamByName('F1').AsDate:=frDlgProductos.DtpkIni.Date;
  DmProveedores.IBDtsConProd.ParamByName('F2').AsDate:=frDlgProductos.DtpkFin.Date;
  end
  else
  begin
  sql1:='select p.numero, p.codigo, p.descripcion, p.pvp, p.fventa, p.estado, P.pfinal,P.observaciones,'+
' R.numero, R.fentrega, R.codProveedor, R.Ftope, R.observaciones'+
' from productos P, Recepcion as R'+
' where P.numero = R.numero And Ftope < :F3 ';
  DmProveedores.IBDtsConProd.SelectSql.Text:=Sql1;
  DmProveedores.IBDtsConProd.ParamByName('F3').AsDate:=Date;
  end;

DmProveedores.IBDtsConProd.Open;

DmProveedores.IBDtsConProd.Last;
lbRegistros.Caption:='Número de registros:'+FormatFloat(',0',DmProveedores.IBDtsConProd.RecordCount);
end;

Un Saludo
__________________
Guía de Estilo de los Foros
Cita:
- Ça c'est la caisse. Le mouton que tu veux est dedans.
Responder Con Cita
  #4  
Antiguo 23-05-2013
sac sac is offline
Miembro
 
Registrado: abr 2007
Posts: 109
Poder: 20
sac Va por buen camino
Así Funciona

Para ayudar a alguno que lo necesite a mi me funcionó de ésta manera:
Código Delphi [-]
Query1.close;   
Query1.sql.clear;   
Query1.SQL.Add('Select ...');   
Query1.SQL.Add('From ....'); //Luego anidé un if con mis 4 posibles consultas por campo cambiando el where y order   
if variable1 then 
begin 
  query1.sql.add('where Edad = :Pedad');  
  query1.sql.add('order by Nombre');   
end 
else //y Saliendo del if  
  Query1.Open; 
  DBGrid1.DataSource:=DS_...;  
end;
También podría haber usado un case en lugar del if
Espero que se haya entendido pero de ésta manera me funcionó

Última edición por Casimiro Noteví fecha: 24-05-2013 a las 05:10:14.
Responder Con Cita
  #5  
Antiguo 24-05-2013
Avatar de oscarac
[oscarac] oscarac is offline
Miembro Premium
 
Registrado: sep 2006
Ubicación: Lima - Perú
Posts: 2.015
Poder: 23
oscarac Va por buen camino
claro sac
lo mas recomendable en esos caso es ir armando una cadena segun los requerimientos y/o parametros de la aplicacion
bien hecho
__________________
Dulce Regalo que Satanas manda para mi.....
Responder Con Cita
  #6  
Antiguo 26-05-2013
Avatar de PepeLolo
PepeLolo PepeLolo is offline
Miembro
 
Registrado: jun 2003
Ubicación: Fuenlabrada - Madrid - Espagna
Posts: 265
Poder: 24
PepeLolo Va por buen camino
Yo en estos casos lo que hago es lo siguiente:
Siempre construyo las consultas con el siguiente truco en el WHERE
Código SQL [-]
SELECT ID, NOMBRE, DIRECCION, POBLACIÓN
FROM CM_CLIENTES 
WHERE 1=1

Otro es poner marcas de sustitución en el SQL:
Código SQL [-]
SELECT ID, NOMBRE, DIRECCIÓN, POBLACIÓN
/* SELECT */ 
FROM CM_CLIENTES
/* FROM */
WHERE 1=1
/* WHERE */
/*ORDER BY*/

Cada una de estas marcas o comentarios los sustituyo por lo que corresponda en función de lo que haya seleccionado el usuario.

En mi caso todas las SQL de las aplicaciones están en BBDD y se leen y cargan donde y cuándo son requeridas.
__________________
PepeLolo
El hombre el único virus que mide más de unas cuantas micras
Responder Con Cita
  #7  
Antiguo 31-05-2013
sac sac is offline
Miembro
 
Registrado: abr 2007
Posts: 109
Poder: 20
sac Va por buen camino
PepeLolo cómo sustituís me podés dar un ejemplo? xq ese código parece muy bueno
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
consulta sobre una consulta :D PablorD MySQL 4 02-06-2010 21:59:51
Realizar una consulta sobre los registros que devuelve otra consulta Borjaserrano Firebird e Interbase 12 01-10-2007 23:19:44
Consulta dentro de otra consulta judit25 Conexión con bases de datos 1 25-06-2007 15:52:15
consulta sobre consulta superhopi SQL 2 16-05-2003 19:01:47


La franja horaria es GMT +2. Ahora son las 01:23:58.


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
Copyright 1996-2007 Club Delphi