Tema: Consulta SQL
Ver Mensaje Individual
  #5  
Antiguo 22-05-2013
Avatar de marcoszorrilla
marcoszorrilla marcoszorrilla is offline
Capo
 
Registrado: may 2003
Ubicación: Cantabria - España
Posts: 11.221
Reputación: 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