Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   SQL (https://www.clubdelphi.com/foros/forumdisplay.php?f=6)
-   -   Consulta de rango de fechas con sql (https://www.clubdelphi.com/foros/showthread.php?t=18440)

Yanet 11-02-2005 23:30:18

Consulta de rango de fechas con sql
 
He entrado en varias ocasiones como visitante a este club, y hoy por fin me he unido como participante, quiero agradecer de antemano cualquier respuesta.

Mi problema es el siguiente: necesito hacer una consulta a una tabla que se llama ventas (la tabla es de Acces), lo que necesito saber es cuanto ha comprado un "distribuidor" x en un periodo de tiempo dado; por ejemplo : cuanto ha comprado el distribuidor con clave 1, del 1 de enero del 2005 al 15 de enero del 2005....

he leido varios problemas similares pero he probado las soluciones y no me han funcionado ...

el codigo que tengo es el siguiente:

datamodule2.Query1.Close;
with datamodule2.Query1.SQL do
begin
clear;
add('select(sum(cantidad_vta))');
add('from Venta where clave_dis='''+stringgrid1.Cells[0,f]+'''and fecha_vta>='''+'01012005'+''' and fecha_vta<='''+'16012005'+''');
datamodule2.Query1.Open;
end;

por ultimo nada mas : estoy trbajando con access 2003 y delphi 7
grax

Carlosguiland 12-02-2005 02:06:21

Hola.
datamodule2.Query1.Close;
with datamodule2.Query1.SQL do
begin
clear;
add('select(sum(cantidad_vta))');
add('from Venta where clave_dis='+stringgrid1.Cells[0,f]+'and fecha_vta between :fecha1 and :fecha2');
datamodule2.Query1.Params[0].Value := fecha1; // esta es de tipo Date
datamodule2.Query1.Params[1].Value := fecha2; // esta es de tipo Date
datamodule2.Query1.Open;
end
////////// es mejor utilizar parametros para consultas de fechas,
Saludos....

roman 12-02-2005 02:07:04

Muy posiblemente el formato en que pones las fechas no es el adecuado para Access. Normalmente los motores usan formatos con separadores entre el día, mes y año y entre unos y otros cambia el orden en que se colocan.

Desconozco cuál es el adecuado para Access pero por lo regular este problema desaparece cuando usas consultas parametrizadas. Pon tu consulta así:

Código SQL [-]
select sum(cantidad_vta) from Venta
where
  clave_dis = :clave_dis and
  fecha_venta >= :fecha_inicial and
  fecha_venta <= :fecha_final

Antes de abrir la consulta sustituyes los parámetros:

Código Delphi [-]
Query1.ParamByName('clave_dis').AsInteger := StringGrid1.Cells[0,f];
Query1.ParamByName('fecha_inicial').AsDate := FechaInicial;
Query1.ParamByName('fecha_final').AsDate := FechaFinal;

donde FechaInicial y FechaFinal son variables de tipo TDate con los valores adecuados.

La componente Query será la encargada de traducir las fechas al formato correcto.

Por cierto, en la consulta que tienes me parece que tampoco van los paréntesis que rodean a sum(cantidad_vta) ylos rangos de fechas los puedes especificar con BETWEEN:

Código SQL [-]
select sum(cantidad_vta) from Venta
where
  clave_dis = :clave_dis and
  fecha_venta between :fecha_inicial and :fecha_final

EDITO:

Bueno, veo que se me han adelantado y sin tanto rollo. :D

// Saludos


La franja horaria es GMT +2. Ahora son las 13:12:58.

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