Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   OOP (https://www.clubdelphi.com/foros/forumdisplay.php?f=5)
-   -   Filtrar busquedas por fecha (https://www.clubdelphi.com/foros/showthread.php?t=90997)

jose001 22-10-2016 07:04:01

Filtrar busquedas por fecha
 
Hola buenas noches estoy intentado hacer una busqueda filtrada por 2 fechas (desde y hasta).Mi aplicacion esta realizada con delphi 2010 y query de zeos
Resulta que tengo un formulario con 2 dbgrid maestro-esclavo que tendrian relacionado uno el query de venta y el otro detalle de venta. En dicho formulario tengo 2 DateTimerPocker, y un boton.
en el query de ventas tengo la siguiente consulta
Código SQL [-]
select * from venta inner join clientes(venta.idcliente=clientes.idcliente) 
where fechaventa BETWEEN :desde AND :hasta

y en el de detalle de venta lo siguiente
Código SQL [-]
select * from detalle_venta inner join producto(detalle_venta.idventa=prodcuto.idproducto)
luego en las propiedades MasterSource,MasterFields,LinkedFields del query detalle hago la relacion al query de venta para establecer la relación maestro detalle.
bien hasta aqui todo perfecto me muestra datos en los dbgrid segun la venta me muestra sus detalles luego procedi a colocar un boton en el escribi el siguiente codigo y es aqui donde comienza el problema


Código Delphi [-]
qVentas.Close;
qVentas.SQL.clear;
qVentas.SQL.ADD('select * from venta where fechaventa BETWEEN :desde AND :hasta');
qVentas.ParanByName('desde').AsDate:= fecha_desde.date;
qVentas.ParanByName('hasta').AsDate:= fecha_hasta.date;
qVentas.Open;

tambien eh probado realizando el siguiente codigo pero con este tuve mas problema que con el anterior
Código Delphi [-]
qVentas.Close;
qVentas.SQL.clear;
qVentas.SQL.ADD('select * from venta');
qVentas.SQL.ADD('where fechaventa BETWEEN ' + FormatDateTime('yyyy/mm/dd',fecha_desde.Date) +
  ' AND '+FormatDateTime('yyyy/mm/dd',fecha_hasta) ;
////...

probando cualquier codigo al realizar la busqueda me pasa los siguiente problemas
1) los dbgrid quedan vacio y no me muestra datos( filtro la busqueda en fechas que se que contienen datos)
2) Aveces me muestra 1 solo dato pero no de la fecha que seleccione y al querer cambiar la fecha tira error de consulta(esto utilizando el primer codigo)
3) al probar el primer codigo nuevamente me larga el siguiente error de syntax de "select * from venta where fechaventa BETWEEN '2016-10-21 AND 2016-10-2 at line 1"

la verdad que no se si estoy escribiendo mal la consulta o filtrando mal la busqueda alguna ayuda? Muchas gracias desde ya

wilcg 23-10-2016 04:13:42

Prueba de esta manera,

Usa un Query para cada DBGrid.

// Filtrar todas la ventas que cumplen la condicion de busqueda
Código Delphi [-]
    with QueryVentas do
    begin
      Close;
      SQL.Clear;
      SQL.Add('SELECT * FROM ventas '+
         ' WHERE fecha_venta BETWEEN '+
         QuotedStr(FormatDateTime( 'yyyy/mm/dd',edtFInicio.Date ))+
         ' AND '+ QuotedStr(FormatDateTime( 'yyyy/mm/dd',edtFFin.Date ))+
         ' ORDER BY id_venta DESC ');
      Open;
      if RecNo < 1 then
        Close;
   end;

Ahora en el el evento OnDataChange del Datasouce vinculado a las ventas, este codigo.

// Filtrar detalles de acuerdo a la venta
Código Delphi [-]
  with QueryVentas do
  begin
    if (Active = True) AND (RecNo > 0) then
      jIdVenta := FieldByName('id_venta').Value;

   QueryDetalles.Close;
   QueryDetalles.SQL.Clear;
   QueryDetalles.SQL.Add('SELECT * FROM detalle_venta '+
     ' WHERE id_venta = :ID ');
   QueryDetalles.ParamByName('ID').Value := jIdVenta;
   QueryDetalles.Open;
   if QueryDetalles.RecNo < 1 then
     QueryDetalles.Close;
  end;

Esto hará que que conforme selecciones un registro de venta te mostrará los detalles en el DBGrid detalles de venta.
Espero que te sirva,

jose001 24-10-2016 06:12:43

gracias
 
Cita:

Empezado por wilcg (Mensaje 509933)
Prueba de esta manera,

Usa un Query para cada DBGrid.

// Filtrar todas la ventas que cumplen la condicion de busqueda
Código Delphi [-]
    with QueryVentas do
    begin
      Close;
      SQL.Clear;
      SQL.Add('SELECT * FROM ventas '+
         ' WHERE fecha_venta BETWEEN '+
         QuotedStr(FormatDateTime( 'yyyy/mm/dd',edtFInicio.Date ))+
         ' AND '+ QuotedStr(FormatDateTime( 'yyyy/mm/dd',edtFFin.Date ))+
         ' ORDER BY id_venta DESC ');
      Open;
      if RecNo < 1 then
        Close;
   end;

Ahora en el el evento OnDataChange del Datasouce vinculado a las ventas, este codigo.

// Filtrar detalles de acuerdo a la venta
Código Delphi [-]
  with QueryVentas do
  begin
    if (Active = True) AND (RecNo > 0) then
      jIdVenta := FieldByName('id_venta').Value;

   QueryDetalles.Close;
   QueryDetalles.SQL.Clear;
   QueryDetalles.SQL.Add('SELECT * FROM detalle_venta '+
     ' WHERE id_venta = :ID ');
   QueryDetalles.ParamByName('ID').Value := jIdVenta;
   QueryDetalles.Open;
   if QueryDetalles.RecNo < 1 then
     QueryDetalles.Close;
  end;

Esto hará que que conforme selecciones un registro de venta te mostrará los detalles en el DBGrid detalles de venta.
Espero que te sirva,

gracias por tomarte el tiempo en ayudarme. Mira resulta que probe tu codigo y a la hora de abrir el listado me queda los 2 dbgrid vacios


La franja horaria es GMT +2. Ahora son las 03:09:47.

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