Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Bases de datos > MySQL
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

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.037
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
  #7  
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 Casimiro, si bien había visto la guía de estilo, no había visto lo que me indicas, lo tendré en cuenta para futuras preguntas y/o respuestas.
Gracias por tu atención
¿será necesario que reformule mi consulta??
Responder Con Cita
  #8  
Antiguo 22-04-2013
sintornillos sintornillos is offline
Registrado
NULL
 
Registrado: abr 2013
Posts: 5
Poder: 0
sintornillos Va por buen camino
Aquí voy de nuevo,(a ver si ahora lo hago bien),

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:

Código Delphi [-]
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:
Código SQL [-]
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
  #9  
Antiguo 22-04-2013
marinaAv marinaAv is offline
Miembro
NULL
 
Registrado: ago 2011
Posts: 15
Poder: 0
marinaAv Va por buen camino
Smile

hola mira yo tengo un codigo parecido al tuyo solo que en la consulta la pongo asi
Código Delphi [-]
Sql.Text:= 'select * ' +            
'from entregas ' +          
 'where Fecha Between  FormatDateTime('yyyy/mm/dd',dt_desde.Date) +' and '+ FormatDateTime('yyyy/mm/dd',dt_hasta.Date);

mi dt_desde es el nombre de mi DateTimePicker y si me funciona espero te sirva
Responder Con Cita
  #10  
Antiguo 23-04-2013
sintornillos sintornillos is offline
Registrado
NULL
 
Registrado: abr 2013
Posts: 5
Poder: 0
sintornillos Va por buen camino
Gracias MarinaAv por tu pronta respuesta, me olvide de aclarar que estoy trabajando con Delphi XE no se si eso tendrá algo que ver, pues el código que me pasaste me tira un error "E2066 Missing operator or semicolon"
Responder Con Cita
  #11  
Antiguo 23-04-2013
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.037
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Usa "open", ya que es un "select", el "execsql" es cuando no devuelve datos: update, insert, etc.

Creo que no estás poniendo el código adecuado para que lo veamos, ya que no puede decirte que no existe el parámetro finicio cuando sí que existe en el código que has pegado.
Responder Con Cita
  #12  
Antiguo 23-04-2013
sintornillos sintornillos is offline
Registrado
NULL
 
Registrado: abr 2013
Posts: 5
Poder: 0
sintornillos Va por buen camino
Muchas Gracias Casimiro, tenías razón el problema era el execsql lo reemplace por el open y funcionó.
Responder Con Cita
  #13  
Antiguo 26-04-2013
marinaAv marinaAv is offline
Miembro
NULL
 
Registrado: ago 2011
Posts: 15
Poder: 0
marinaAv Va por buen camino
Cita:
Empezado por sintornillos Ver Mensaje
Gracias MarinaAv por tu pronta respuesta, me olvide de aclarar que estoy trabajando con Delphi XE no se si eso tendrá algo que ver, pues el código que me pasaste me tira un error "E2066 Missing operator or semicolon"

mmm que raro yo tambien estoy con delphi xe y no me marca nada o sabes que ese error es que estas mandando un dato diferente que no lo permite :S
Responder Con Cita
  #14  
Antiguo 26-04-2013
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Cita:
Empezado por marinaAv Ver Mensaje
mmm que raro yo tambien estoy con delphi xe y no me marca nada o sabes que ese error es que estas mandando un dato diferente que no lo permite :S
Hola marinaAv.

Seguramente ha sido un desliz al copiar/pegar o redactar el mensaje (a todos nos ha pasado). Pero al código del mensaje #9:
Código Delphi [-]
Sql.Text:= 'select * ' +            
'from entregas ' +          
 'where Fecha Between  FormatDateTime('yyyy/mm/dd',dt_desde.Date) +' and '+ FormatDateTime('yyyy/mm/dd',dt_hasta.Date);
efectivamente le falta una coma como señala el mensaje de error que nos comenta sintornillos.

Código Delphi [-]
Sql.Text:= 'select * ' +            
'from entregas ' +          
 'where Fecha Between ' + FormatDateTime('yyyy/mm/dd',dt_desde.Date) +' and '+ FormatDateTime('yyyy/mm/dd',dt_hasta.Date);

Saludos.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #15  
Antiguo 29-04-2013
marinaAv marinaAv is offline
Miembro
NULL
 
Registrado: ago 2011
Posts: 15
Poder: 0
marinaAv Va por buen camino
:O cierto una disculpa no me fije bien entonces ya te funciona?
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

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 14:31:52.


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