Delphi - Sql consultar por rango de fechas

 
Vista:

Sql consultar por rango de fechas

Publicado por Alberto ortiz (47 intervenciones) el 31/08/2005 22:44:06
Hola intento consultar una tabla de paradox por rango de fechas y me marca algo asi como "type mismatch" lo que quiero es por ejemplo los productos vendidos en el año 2001
por ejemplo del 01/01/01 a el 31/12/01 o los productos vendidos entre el 2003 y 200
como lo hago
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Sql consultar por rango de fechas

Publicado por BigLuis (713 intervenciones) el 01/09/2005 11:17:43
Yo lo haria con parametros
Primero todas las instrucciones SQL que quieras y añadir esto:

ModuloQuerys.Query4.SQL.Add('AND Tabla.FECHA>=:FECHAINICIO');
ModuloQuerys.Query4.SQL.Add('AND Tabla.FECHA<=:FECHAFINAL');
ModuloQuerys.Query4.Parambyname('FECHAINICIO').AsDate:=strtodate(DateEdit1.Text);
ModuloQuerys.Query4.Parambyname('FECHAFINAL').AsDate:=strtodate(DateEdit2.Text);
ModuloQuerys.Query4.Open;
A mi me ha funcionado

Tambien puedes usar estas rutinas para asegurar que utilizas bien las fechas segun el estandar SQL
//Unidad NKDates.pas
// CopyRight: José Manuel Rodríguez (JMR)
// Autores: José Manuel Rodríguez, Rafael Barón y Mª José Izquierdo.
function CheckDate(wYear, wMonth, wDay: Word): TDateTime;
begin
try
Result := EncodeDate(wYear, wMonth, wDay);
except
Result := NaN;
raise EDateError.Create(sInvalidDate);
end (*try*);
end (*CheckDate*);

function EncodeSQL92Date(wYear, wMonth, wDay: Word): String; overload;
begin
if glCheckDates then
CheckDate(wYear, wMonth, wDay);
Result := Format('%4.4d-%2.2d-%2.2d', [wYear, wMonth, wDay]);
end (*EncodeSQL92Date*);

function EncodeSQL92Date(dDate: TDateTime): String; overload;
var
wYear,
wMonth,
wDay: Word;
begin
DecodeDate(dDate, wYear, wMonth, wDay);
Result := EncodeSQL92Date(wYear, wMonth, wDay);
end (*EncodeSQL92Date*);

function DecodeSQL92Date(const cDate: String): TDateTime;
var
i: Integer;
wYear,
wMonth,
wDay: Word;
begin
Result := NaN;
if (cDate = EmptyStr) or (Length(cDate) <> 10) then
exit;
for i := 1 to 10 do
begin
if (i in [5, 8]) then
begin
if cDate[i] <> '-' then
exit;
end (*if*)
else if not (cDate[i] in ['0'..'9']) then
exit;
end (*for*);
wYear := StrToInt(Copy(cDate,1,4));
wMonth := StrToInt(Copy(cDate,6,2));
wDay := StrToInt(Copy(cDate,9,2));
Result := CheckDate(wYear, wMonth, wDay);
end (*DecodeSQL9292Date*);

Suerte
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar