Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Bases de datos > MySQL
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 21-10-2010
DeLiRioS DeLiRioS is offline
Miembro
 
Registrado: ene 2007
Posts: 10
Poder: 0
DeLiRioS Va por buen camino
Consulta entre 2 fechas.

Buenas, disculpen amigos se que este tema ya se ha tratado antes y lo he intentado de muchas maneras de las expuestas aki en el clubdelphi y nose cual es el problema. Necesito hacer una consulta entre dos fechas que ingreso mediante dos DateTimePicker utilizo Delphi 7 y MySql. Utilizo los componente, TTable,Tquery, TdataSource. Y si sirve de dato, el campo FechaIngreso es de tipo TimeStamp (YYMMDDHHMMSS). El codigo sql es el siguiente:

Código Delphi [-]
begin
     If Active Then Close;
        SQL.Clear;
        SQL.Add('Select Empleado, Departamento');
        SQL.Add('From Empleados');
        SQL.Add('Where FechaIngreso Between'+DateToStr(FechaIni.Date)+'And'+DateToStr(FechaFin.Date));
        Open;
end;
Pero resulta que el error que me arroja es el siguiente:
Check the manual that correponds to your MySQL server version for the right syntax to user near 'Between01/09/2010And1(

esa fecha que aparece ahi es la fecha de incio que ingreso.
Desde ya gracias.

Última edición por DeLiRioS fecha: 21-10-2010 a las 00:33:26.
Responder Con Cita
  #2  
Antiguo 21-10-2010
Avatar de rgstuamigo
rgstuamigo rgstuamigo is offline
Miembro
 
Registrado: jul 2008
Ubicación: Santa Cruz de la Sierra-Bolivia
Posts: 1.646
Poder: 17
rgstuamigo Va por buen camino
Arrow

Bueno segun veo, tu código tiene dos errores principales, el primero es que no has dejado un espacio despues de la clausula 'Between' y tambien debe haber un espacio antes y despues de el "And".
El segundo error es que MySQL guarda las fechas en éste formato > YYYY-MM-D , es decir : Año-Mes-Día , lo que significa que al utilizar la funcion DateToStr no le estas mandando el formato adecuado para la consulta.
Solucion: Para estos menesteres es bueno hacer uso de lo que se llama Parámetros que son una especie de variables alas que se les puede asignar valores y utilizarlas en la consulta SQL, mas o menos de éste forma:
Código Delphi [-]
  begin
    If Active Then Close;
        SQL.Clear;
        SQL.Add('Select Empleado, Departamento');
        SQL.Add('From Empleados');
        SQL.Add('Where FechaIngreso Between :F1 And :F2');{ Al poner los Dos puntos ( : ) Delphi crea 
                                                                                 los parámetros F1 y F2 Automáticamente}
        ParamByName('F1').AsDate:=FechaIni.Date;// asigno el valor de la fecha inicial al parámtro F1
        ParamByName('F2').AsDate:=FechaFin.Date; //asigno el valor de la fecha final al parámtro F2
        Open;
  end;
Nota:Como podrán observar el código anterior ,no me he preocupado por enviar la consulta con el formato adecuado tal como lo guarda MySQL, ésto se debe a que el propio DataSet que ejecuta la consulta ya sabe como hacerlo..
Saludos...
__________________
"Pedid, y se os dará; buscad, y hallaréis; llamad, y se os abrirá." Mt.7:7

Última edición por rgstuamigo fecha: 21-10-2010 a las 00:58:35.
Responder Con Cita
  #3  
Antiguo 21-10-2010
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 25
Caral Va por buen camino
Hola
Es un error frecuente pensar que delphi entiende todo.
Veamos esto:
Código Delphi [-]
        SQL.Add('Select Empleado, Departamento');
        SQL.Add('From Empleados');
        SQL.Add('Where FechaIngreso Between'+DateToStr(FechaIni.Date)+'And'+DateToStr(FechaFin.Date));
Delphi entiende el texto asi:
Select Empleado, DepartamentoFrom EmpleadosWhere FechaIngreso Between'+DateToStr(FechaIni.Date)+'And'+DateToStr(FechaFin.Date));

Esto es logico ya que es texto lo que se ejecuta dentro del add.
Escomo siquisieraque meentendieradelphi que esloquequiero decir.
Se entiende lo anterior?, no lo creo o por lo menos cuesta.
Solucion: espacio entre todo esto:
Código Delphi [-]
        SQL.Add('Select Empleado, Departamento ');
        SQL.Add('From Empleados ');
        SQL.Add('Where FechaIngreso Between '+DateToStr(FechaIni.Date)+ ' And ' +DateToStr(FechaFin.Date));
Por eso prefiero usar text y parametros ya que se entiende mejor:
Código Delphi [-]
SQL.text:= 'Select Empleado, Departamento '+
           'From Empleados '+
           'Where FechaIngreso Between :dato1 and :dato2 ';
Saludos
__________________
Siempre Novato
Responder Con Cita
  #4  
Antiguo 21-10-2010
DeLiRioS DeLiRioS is offline
Miembro
 
Registrado: ene 2007
Posts: 10
Poder: 0
DeLiRioS Va por buen camino
Hola gracias amigos por su atención, hice como me explicaron, con los parametros y respetando los espacios pero ahora me da un nuevo error. Me dice: "Operation not applicable" intente cambiando en el ParamByName().AsDate por Value y el error ya no da pero no arroja nada la consulta, uso este código:

Código Delphi [-]
 
 begin
    If Active Then Close;
        SQL.Clear;
        SQL.Add('Select Empleado, Departamento');
        SQL.Add('From Empleados');
        SQL.Add('Where FechaIngreso Between :F1 And :F2');{ Al poner los Dos puntos ( : ) Delphi crea 
                                                                                 los parámetros F1 y F2 Automáticamente}
        ParamByName('F1').AsDate:=FechaIni.Date;// asigno el valor de la fecha inicial al parámtro F1
        ParamByName('F2').AsDate:=FechaFin.Date; //asigno el valor de la fecha final al parámtro F2
        Open;
  end;

La consulta la hice correr en el MySql-Front donde está la BD y funciona a la perfección, teniendo en cuenta que alli inserto la fecha de incio y de fin.
Pero en delphi me da ese error y es con las fechas probe haciendo otro tipo de consulta y tmb funciona perfecto, parece que es la manera en que paso los parametro o algo asi, tendra algo que ver que es un campo Timestamp? alli guardo fecha y hora. Usando SQL.Text me da el mismito error, disculpen quiizas es algo siemple pero no puedo resolverlo. Gracias de ante mano amigos.

Última edición por DeLiRioS fecha: 21-10-2010 a las 05:39:16.
Responder Con Cita
  #5  
Antiguo 22-04-2013
sintornillos sintornillos is offline
Registrado
NULL
 
Registrado: abr 2013
Posts: 5
Poder: 0
sintornillos Va por buen camino
Consulta entre 2 Fechas

Hola amigos, estoy tartando de hacer lo arriba indicado, en mi caso tengo una tabla Mysql, cuya estructura es la siguiente:
Tabla entregas identrega, idbeneficiarios, idmercaderia, fecha
beneficiariosidbeneficiarios, apellido, nombre, dni
mercaderiaidmercaderia,detalle

En el formulario FrmBenefxFecha tengo un Zquery ZQryFecha, dos DateTimePicker, en los cuales ingreso la fecha de inicio y la fecha final y un boton para iniciar la busqueda y un Dbgrid donde muestro el resultado, el código es el siguiente:

with FrmBenefxFec.ZQryFecha do
begin
Close;
Sql.Text:= 'select * ' +
'from entregas ' +
'where Fecha Between :finicio and :ffinal ';


ParamByName('finicio').AsDate:=DateTPDesde.Date;
ParamByName('ffinal').AsDate:=DateTPHasta.Date;
Sql.Add('Order By Fecha');

//Open;
ExecSQL;
end

El código en las propiedades sql del Zquery es el siguiente:

select * from entregas
inner join beneficiarios
on (entregas.idbeneficiarios=beneficiarios.idbeneficiarios)
inner join mercaderia
on (entregas.idmercaderia=mercaderia.idmercaderia);

y al ejecutarlo me sale el siguiente error:
ZQryFecha: Parameter 'finicio' not found

trate de incluir los parametros en las propiedades params de la zquery y tampoco.

Desde ya les agradezco vuestra ayuda.-
Responder Con Cita
  #6  
Antiguo 22-04-2013
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.044
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Bienvenido a clubdelphi, ¿ya leiste nuestra guía de estilo?, gracias por tu colaboración

Recuerda poner los tags al código fuente, ejemplo:



Gracias
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Consulta Mysql Suma entre rango de fechas kaeltas MySQL 4 22-06-2012 21:30:44
Obtener consulta entre fechas maravert MySQL 1 16-11-2009 22:44:15
slq entre dos fechas comparar fechas taru MySQL 2 30-07-2007 16:10:36
Entre fechas erick_jesus Impresión 1 29-05-2006 19:10:50
dias entre dos fechas davidgaldo Varios 5 19-05-2005 21:02:03


La franja horaria es GMT +2. Ahora son las 21:23:29.


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
Copyright 1996-2007 Club Delphi