Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Firebird e Interbase (https://www.clubdelphi.com/foros/forumdisplay.php?f=19)
-   -   Consulta con fechas en firebird error!!! (https://www.clubdelphi.com/foros/showthread.php?t=62887)

manueltp 19-01-2009 21:01:07

Consulta con fechas en firebird error!!!
 
hola que tal aki de nuevo con este problema de fechas....
quiero hacer un reporte con una consulta de rango de fechas.....
hago primero la consulta en la base de datos con sql y este codigo::

SELECT FECHA, NOMBRE, MEDICO, PRIMERAVEZ, PARTICULAR, ASEGURADORA
from PACIENTES
WHERE FECHA >= 01/01/2009 AND FECHA <=18/01/2009
y me da error ....

lo cambie asi....

SELECT FECHA, NOMBRE, MEDICO, PRIMERAVEZ, PARTICULAR, ASEGURADORA
from PACIENTES
WHERE FECHA >= CAST('01/01/2009' as date)
y este si me da resultados pero yo kiero un rango de fechas y pongo este:

SELECT FECHA, NOMBRE, MEDICO, PRIMERAVEZ, PARTICULAR, ASEGURADORA
from PACIENTES
WHERE FECHA >= CAST('01/01/2009' as date) and
FECHA <= CAST('18/01/2009' as date)

y me da error: ISC ERROR MESSAGE:
conversion error from string "18/01/2009"

no acepta dos conversiones en una misma linea o que sera? ....
es que no se como se hacen entonces las consultas para un rango de fechas
se los agradeceria demasido si me ayudaran ,....
me interesa demasiado.:confused::confused::confused::confused::confused::confused::confused:

Al González 19-01-2009 21:15:14

Cuando escribas valores de fecha literales para ser procesados por algún motor SQL, utiliza el formato ISO (aaaa-mm-dd), ya que de otra manera no tendrás seguridad de cuál de las cifras tomará como mes y cuál como día.

Saludos.

Al.

Kipow 19-01-2009 21:22:59

Yo utilizo siempre el formato dd/mm/aaaa y no he tenido ningun problema. :)

manueltp 19-01-2009 21:26:59

gracias

yo utilo el IBOConsole y cuando hago insercion de fechas me acepta el dd/mm/aaaa, porque me pone asi al moneto de querer ingresar una fechas : / / .

entonces que cambios hago?????
no hay manera de realizar esta consulta de alguna manera con este formato??? o que modificacion le hago a la consulta...

Kipow 19-01-2009 22:22:13

solo cambia el formato por mm/dd/aaaa

Código SQL [-]
SELECT FECHA, NOMBRE, MEDICO, PRIMERAVEZ, PARTICULAR, ASEGURADORA
from PACIENTES
WHERE FECHA >= CAST('01/01/2009' as date) and 
FECHA <= CAST('01/18/2009' as date)

Caro 19-01-2009 22:42:44

Cita:

Empezado por manueltp (Mensaje 335037)
gracias

yo utilo el IBOConsole y cuando hago insercion de fechas me acepta el dd/mm/aaaa, porque me pone asi al moneto de querer ingresar una fechas : / / .

entonces que cambios hago?????
no hay manera de realizar esta consulta de alguna manera con este formato??? o que modificacion le hago a la consulta...

Hola manueltp, de la forma que te ha indicado Al debería funcionarte la consulta por un rango de fechas, si lo haces de la otra forma tienes que pasarle con formato mm/dd/yyyy, el Cast no es necesario.

Código SQL [-]
SELECT FECHA, NOMBRE, MEDICO, PRIMERAVEZ, PARTICULAR, ASEGURADORA
from PACIENTES
WHERE FECHA >= '01/01/2009' AND FECHA <='01/18/2009'

SELECT FECHA, NOMBRE, MEDICO, PRIMERAVEZ, PARTICULAR, ASEGURADORA
from PACIENTES
WHERE FECHA >= '2009-01-01' AND FECHA <='2009-01-18'

//también puedes utilizar Between
 
SELECT FECHA, NOMBRE, MEDICO, PRIMERAVEZ, PARTICULAR, ASEGURADORA
from PACIENTES
WHERE FECHA Between '01/01/2009' AND '01/18/2009'

Saluditos

manueltp 20-01-2009 01:08:22

MUCHAS GRACIAS POR SU AYUDA , YA LO HICE Y SI ME DA LA CONSULTA

SE LOS AGRADEZCO ...
AHORA LA DUDA SERIA Y AL MOMENTO DE HACER LA CONSUTLA EN DELPHI
COMO DEBO ESPECIFICAR LOS CARACTERES O CON QUE FUNCION LA DEBO DE HACER ......

TENGO ESTE CODIGO ::

Código Delphi [-]
procedure TFFechas.Button1Click(Sender: TObject);
begin
      //ShortDateFormat := 'mm/dd/yyyy';
      try
         FReporte:=TFReporte.Create(self);
         FReporte.QryReporte1.SQL.Add('SELECT FECHA, NOMBRE, MEDICO, PRIMERAVEZ, PARTICULAR, ASEGURADORA ');
         FReporte.QryReporte1.SQL.Add('FROM PACIENTES ');
         FReporte.QryReporte1.SQL.Add('WHERE  FECHA >= '+ DateToStr(DTP1.Date)+' AND  FECHA <= '+ DateToStr(DTP2.Date)+' ORDER BY FECHA');
         FReporte.QryReporte1.Open;
         ShortDateFormat := 'mm/dd/yyyy';
         //QRPlaGen.Titulo.text := 'Hojas de Pago de Planillas';
         FReporte.RVP1.ExecuteReport(ReporteF1);
      finally
         FReporte.RVP1.Destroy;
      end;
end;


aver si esta bien o no
se los agradeceria.:)

brandolin 20-01-2009 02:45:57

yo normalmente hago lo siguiente...
Código Delphi [-]
try
         FReporte:=TFReporte.Create(self);
         FReporte.QryReporte1.SQL.Add('SELECT FECHA, NOMBRE, MEDICO, PRIMERAVEZ, PARTICULAR, ASEGURADORA ');
         FReporte.QryReporte1.SQL.Add('FROM PACIENTES ');
         FReporte.QryReporte1.SQL.Add(format('WHERE  FECHA >= ''%s'' AND  FECHA <= ''%s'' ORDER BY FECHA', [DateToStr(DTP1.Date), DateToStr(DTP2.Date)]));
         FReporte.QryReporte1.Open;
         ShortDateFormat := 'mm/dd/yyyy';
         //QRPlaGen.Titulo.text := 'Hojas de Pago de Planillas';
         FReporte.RVP1.ExecuteReport(ReporteF1);
      finally
         FReporte.RVP1.Destroy;
      end;

solo introduzco la funcion format y me da mas claridad en la sentencia...

manueltp 20-01-2009 02:54:25

muchas gracias ....
otra cosa mas:

pero el DataTimePicker tomaria la fecha como : dd/mm/aaaa
y como mm/dd/aaaa
no me daria error con la fecha de nuevo?????

Delphius 20-01-2009 04:19:17

¿Y porqué no usar parámetros y BETWEEN?:confused:

Código SQL [-]
Select tus_campos
from tu_tabla
where campo_fecha BETWEEN :fecha1 AND fecha2

Saludos,

Caro 20-01-2009 04:58:34

Hola de nuevo, tienes que darle el formato a la fecha de tu DateTimePicker ya que te devolvera como dd/mm/yyyy, puedes utilizar también FormatDate y como te dije también puedes utilizar el Between en tu consulta.

Código Delphi [-]
procedure TFFechas.Button1Click(Sender: TObject);
begin
     try
         FReporte:=TFReporte.Create(self);         
         FReporte.QryReporte1.SQL.Add('SELECT FECHA, NOMBRE, MEDICO, PRIMERAVEZ, PARTICULAR, ASEGURADORA ');
         FReporte.QryReporte1.SQL.Add('FROM PACIENTES ');
         FReporte.QryReporte1.SQL.Add('WHERE FECHA BETWEEN '+QuotedStr(FormatDateTime('mm/dd/yyyy',DTP1.Date))+
         ' AND  '+ QuotedStr(FormatDateTime('mm/dd/yyyy',DTP2.Date))+' ORDER BY FECHA');
         FReporte.QryReporte1.Open;

         FReporte.RVP1.ExecuteReport(ReporteF1);
      finally
         FReporte.RVP1.Destroy;
      end;
end;

O utilizar parametros como te dice Delphius.

Código Delphi [-]
FReporte.QryReporte1.SQL.Add('SELECT FECHA, NOMBRE, MEDICO, PRIMERAVEZ, PARTICULAR, ASEGURADORA ');
         FReporte.QryReporte1.SQL.Add('FROM PACIENTES ');
         FReporte.QryReporte1.SQL.Add('WHERE FECHA BETWEEN :FECHAINI AND :FECHAFIN ORDER BY FECHA');
         FReporte.QryReporte1.ParamByName('FECHAINI').AsDate:=DTP1.Date;
         FReporte.QryReporte1.ParamByName('FECHAFIN').AsDate:=DTP2.Date;
         FReporte.QryReporte1.Open;

Saluditos

manueltp 20-01-2009 22:15:04

muchas gracis por su ayuda .....
los implementare asi como me aconsejan ...
gracias
cualquier cosa escribo para su ayuda...
gracias:)

MARLON1 09-08-2010 18:54:39

Cita:

Empezado por Delphius (Mensaje 335076)
¿Y porqué no usar parámetros y BETWEEN?:confused:


Código SQL [-]Select tus_campos
from tu_tabla
where campo_fecha BETWEEN :fecha1 AND fecha2




Saludos,

Que tal Delphius:

Estoy utilizando el ejemplo que mencionas, pero me marca un error, "operacion no apicable" tendras alguna idea de por que me aparece el error, muchas gracias de antemano. Utilizo delphi 10.

Código SQL [-]
  QUERY1.Close;
   QUERY1.SQL.Clear;
   QUERY1.SQL.Add('SELECT * FROM REPDIARIO WHERE repfecha between :inicio and :final');
   query1.ParamByName('inicio').AsDate:=DateTimePicker1.Date;
   query1.ParamByName('final').AsDate:=DateTimePicker2.Date;
   QUERY1.Open;


La franja horaria es GMT +2. Ahora son las 22:55:26.

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