Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Conexión con bases de datos
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Conexión con bases de datos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 02-06-2008
Avatar de vroa74
vroa74 vroa74 is offline
Miembro
 
Registrado: jul 2006
Posts: 254
Poder: 18
vroa74 Va por buen camino
Question ayuda con query para Mysql fecha.

Estoy haciendo una busqueda atravez de fecha uso 2 campos fecha
cuando las fecha son iguales busca la fecha que coincida con esa fecha cuando no busca por rago de fecha
mas sin embargo no esta haciendo nada de lo que le pido

1er inconsistencia es: cuando marco dos fecha de difereste mes teniendo en cuenta que la primera es menor que la segunda la busqueda no me entrega registros y se que hay registros en esa fecha. vea la image Aqui

2do inconsistencia es: marco dos fecha dentro del mismo mes que se que hay datos, me muestra los datos mas sin embargo me muestra datos que no esta dentro de la busqueda. Vea la Imagen Aqui

3er inconsistencia es: busco una fecha determinada y ambos componentes les pogo la misma fecha que se que si existe y no me devuelve nada la busqueda. Vea la Imagen Aqui.


Les agrego el codigo esperando que me puedan ayudar.

Código Delphi [-]
 if Form1.MyQuery1.Active then
 begin
   form1.MyQuery1.Close;
   form1.MyQuery1.SQL.Clear;
 end;

  with form1 do
  begin
          MyQuery1.SQL.Add('SELECT');
          MyQuery1.SQL.Add('servicios.`status`,');
          MyQuery1.SQL.Add('servicios.id_ser,');
          MyQuery1.SQL.Add('servicios.f_recep,');
          MyQuery1.SQL.Add('servicios.f_ini,');
          MyQuery1.SQL.Add('servicios.nombre,');
          MyQuery1.SQL.Add('servicios.ofi_dir,');
          MyQuery1.SQL.Add('servicios.f_ter,');
          MyQuery1.SQL.Add('servicios.ob_sol,');
          MyQuery1.SQL.Add('servicios.m_correc,');
          MyQuery1.SQL.Add('servicios.m_prev,');
          MyQuery1.SQL.Add('servicios.software,');
          MyQuery1.SQL.Add('servicios.red,');
          MyQuery1.SQL.Add('servicios.`diseño`,');
          MyQuery1.SQL.Add('servicios.soporte,');
          MyQuery1.SQL.Add('servicios.impresion,');
          MyQuery1.SQL.Add('servicios.sol,');
          MyQuery1.SQL.Add('servicios.sol_via_email,');
          MyQuery1.SQL.Add('servicios.sol_via_ofi,');
          MyQuery1.SQL.Add('servicios.sol_via_oral,');
          MyQuery1.SQL.Add('servicios.sol_via_tel,');
          MyQuery1.SQL.Add('servicios.sol_via_otro,');
          MyQuery1.SQL.Add('servicios.sol_via_ofi_num,');
          MyQuery1.SQL.Add('servicios.sol_via_memo,');
          MyQuery1.SQL.Add('servicios.ac_rea,');
          MyQuery1.SQL.Add('servicios.obser,');
          MyQuery1.SQL.Add('servicios.respon,');
          MyQuery1.SQL.Add('servicios.dir_resp,');
          MyQuery1.SQL.Add('servicios.img');
          MyQuery1.SQL.Add('FROM');
          MyQuery1.SQL.Add('servicios');
          MyQuery1.SQL.Add('WHERE');
          if JvDateTimePicker1.Date = JvDateTimePicker2.Date then
                MyQuery1.SQL.Add('servicios.f_ini = '+ QuotedStr(DateToStr(JvDateTimePicker1.Date)) +'')
             else begin
                MyQuery1.SQL.Add('(servicios.f_ini >='+ QuotedStr(DateToStr(JvDateTimePicker1.Date))  +') AND  (servicios.f_ini <='+ QuotedStr(DateToStr(JvDateTimePicker2.Date))  +')');
             end;

          //ordenar
          MyQuery1.SQL.Add('ORDER BY');
          MyQuery1.SQL.Add('servicios.f_ini');

          MyQuery1.Open; // abrir query
Responder Con Cita
  #2  
Antiguo 02-06-2008
Avatar de enecumene
[enecumene] enecumene is offline
Miembro de Oro
 
Registrado: may 2006
Ubicación: Santo Domingo, Rep. Dom.
Posts: 3.040
Poder: 21
enecumene Va por buen camino
Hola, ¿Por qué no utilizas mejor parámetros?, ¿los campos de fechas son campos tipo date?, porque veo que conviertes una fecha a string cosa que no le veo sentido .

Saludos.
__________________

Mi BLOG - ¡Joder, leanse la guia de estilo!
Las Palabras son enanas, los ejemplos gigantes.
Responder Con Cita
  #3  
Antiguo 02-06-2008
Avatar de vroa74
vroa74 vroa74 is offline
Miembro
 
Registrado: jul 2006
Posts: 254
Poder: 18
vroa74 Va por buen camino
Question

Mucha gracias,gracis por tu comentario mas embargo me gustaria que me dieras un ejemplo si pudieras.

Encontre el problema principal mas estoy buscando ayuda para solucionarlo
el servidor mysql tiene un formato de fecha YYYY/MM/DD delphi tima un valor del sistema de tipo DD/MM/YYYY ya intente cambiarle el formato al componente de esta forma
Código Delphi [-]
JvDateTimePicker1.Format :='yyyy/MM//dd'


cuendo ejecuto el query y lo visualizo queda de nuevo DD/MM/YYYY.
Eso me da la idea que debo cambiarle el formato a la fecha en punto mas bajo cambiarle el formato de fecha al sistema, estoy buscando como.

me imagino que algo como system.date.format :='YYYY/MM/DD';
mas tambien puede ser iguarl de complicado cambarle la variable a mysql para que en lugar de ser %Y%M%D sea %D %M %Y

sigo buscando si encuantro la solucio la publicare mientras sigo buscando y les pido ayuda.
Responder Con Cita
  #4  
Antiguo 02-06-2008
Avatar de enecumene
[enecumene] enecumene is offline
Miembro de Oro
 
Registrado: may 2006
Ubicación: Santo Domingo, Rep. Dom.
Posts: 3.040
Poder: 21
enecumene Va por buen camino
Hola, el formato por default de MySQL no es YYYY/MM/DD sino yyyy-MM-dd, por lo tanto debería ser así:

Código Delphi [-]
JvDateTimePicker1.Format :='yyyy-MMM-dd'

Saludos.
__________________

Mi BLOG - ¡Joder, leanse la guia de estilo!
Las Palabras son enanas, los ejemplos gigantes.
Responder Con Cita
  #5  
Antiguo 03-06-2008
Avatar de vroa74
vroa74 vroa74 is offline
Miembro
 
Registrado: jul 2006
Posts: 254
Poder: 18
vroa74 Va por buen camino
Mychas gracias por tu comentario.
ya lo he eintentado mas sin embargo despues de ejecutar query lo envio a un campo memo
y siguo observo que aunque le cambio el modo al momento de enviarlo al query sigue quedado de la forma

dd/MM/yyyy

te agradesco mucho que contestaras mas sigo en la busqueda de la solucion
Responder Con Cita
  #6  
Antiguo 03-06-2008
Avatar de enecumene
[enecumene] enecumene is offline
Miembro de Oro
 
Registrado: may 2006
Ubicación: Santo Domingo, Rep. Dom.
Posts: 3.040
Poder: 21
enecumene Va por buen camino
Hola, hay algo que no entiendo, pones lo siguiente:

Código Delphi [-]
if JvDateTimePicker1.Date = JvDateTimePicker2.Date then
                MyQuery1.SQL.Add('servicios.f_ini = '+ QuotedStr(DateToStr(JvDateTimePicker1.Date)) +'')
             else begin
                MyQuery1.SQL.Add('(servicios.f_ini >='+ QuotedStr(DateToStr(JvDateTimePicker1.Date))  +') AND  (servicios.f_ini <='+ QuotedStr(DateToStr(JvDateTimePicker2.Date))  +')');
             end;

¿el campo servicios.f_ini es un campo Date o string?, por qué no intentas de esta manera?:

Código Delphi [-]
if JvDateTimePicker1.Date = JvDateTimePicker2.Date then
            begin
                MyQuery1.SQL.Add('servicios.f_ini = :fecha');
                MyQuery1.ParamByName('fecha').AsDate := JvDateTimePicker1.Date;
             end else begin
                MyQuery1.SQL.Add('servicios.f_ini >= :inicio AND servicios.f_ini <= :final');
                MyQuery1.ParamByName('inicio').AsDate := JvDateTimePicker1.Date;
                MyQuery1.ParamByName('final').AsDate := JvDateTimePicker2.Date;
             end;
   end;

Saludos.
__________________

Mi BLOG - ¡Joder, leanse la guia de estilo!
Las Palabras son enanas, los ejemplos gigantes.

Última edición por enecumene fecha: 03-06-2008 a las 02:32:11.
Responder Con Cita
  #7  
Antiguo 03-06-2008
Edgtho Edgtho is offline
Miembro
 
Registrado: abr 2006
Posts: 47
Poder: 0
Edgtho Va por buen camino
sino quieres utilizar parametros y segun que version de mysql tambien puedes usar la funcion DATEFORMAT dentro de la propia sentencia

Código:
MyQuery1.SQL.Add('Date_Format(servicios.f_ini,''%d/%m/%Y'') = '+ QuotedStr(DateToStr(JvDateTimePicker1.Date)) +'')

O usar FormatDateTime en la parte de fuera
__________________
Dios es real a menos que sea declarado entero
Responder Con Cita
  #8  
Antiguo 03-06-2008
Avatar de vroa74
vroa74 vroa74 is offline
Miembro
 
Registrado: jul 2006
Posts: 254
Poder: 18
vroa74 Va por buen camino
He notado que cuando el Rango de es al mismo mes no hay problema con la busqueda si se da 01/05/2008 al 31/05/2008.
Mas sin embargo cando el rango se sobrepasa al limite del mes las busqueda no da resultado alguno dega el grid vacio. ejemplo 01/05/2008 al 31/06/2008.

Código Delphi [-]
MyQuery1.SQL.Add('(Date_Format(servicios.f_ini,''%d/%m/%Y'') >= '+ QuotedStr(DateToStr(JvDateTimePicker1.Date))  +') AND  ( Date_Format(servicios.f_ini,''%d/%m/%Y'') <='+ QuotedStr(DateToStr(JvDateTimePicker2.Date))  +')');

[enecumene] : Muchas gracias por la ayuda, Te agardesco todo tu apoyo, con respecto al ultiomo post, no esto asignandole valos al registro de la DB, estoy extrayendo el valor para una Consulta, quizas fui un poco o muy ambiguo al escribir y te pido disculpas.

Edgtho : Mucha gracias por tu ayuda, lo que escribiste fue exacto lo que necesitaba, mucha gracias

Y a todo los demas que lean este post espero que el problema que tengo les pueda ayudar en algo.


Última edición por vroa74 fecha: 03-06-2008 a las 15:15:09. Razón: duas sobre el tama
Responder Con Cita
  #9  
Antiguo 03-06-2008
Avatar de enecumene
[enecumene] enecumene is offline
Miembro de Oro
 
Registrado: may 2006
Ubicación: Santo Domingo, Rep. Dom.
Posts: 3.040
Poder: 21
enecumene Va por buen camino
Pues vale, yo entendía que, cuando hacias la busqueda el valor del datetime lo tomaba como d/m/yyyy y no yyyy-m-d, pero ahora en este último post pues entendí lo querías hacer, Presentar la fecha resultante en otro formato. .

Saludos.
__________________

Mi BLOG - ¡Joder, leanse la guia de estilo!
Las Palabras son enanas, los ejemplos gigantes.
Responder Con Cita
  #10  
Antiguo 04-06-2008
Avatar de vroa74
vroa74 vroa74 is offline
Miembro
 
Registrado: jul 2006
Posts: 254
Poder: 18
vroa74 Va por buen camino
Question

Hola:
sigo con el pequeño problema de no poder filtrar buen la base de datos, debe ser por algun detalle. el problema es cuando seleciono un rago de fechas es codigo que uso es:
Código Delphi [-]
            MyQuery1.SQL.Add('(Date_Format(servicios.f_ini,''%d/%m/%Y'') >= '+ QuotedStr(DateToStr(JvDateTimePicker1.Date))  +') AND  ( Date_Format(servicios.f_ini,''%d/%m/%Y'') <='+ QuotedStr(DateToStr(JvDateTimePicker2.Date))  +')');

mas sin embargo me sigue haciendo cosas que no le veop sentido.
por ejemplo

si seleciono un rango de fecha 01/02/2008 al 04/06/2008 me da solo 3 registros y en la base de datos de prueba en ese rango de fecha hay 21 registros.
los registros que me da son lso que inicia con 1 y 2 de cada mes, tego registro con dias 15 19 20 22 30 de cada mes mas eso nos lo muestra..

es teoria deberia estar mostrando todos alguien me podria ayudar para saber en que estoy fallando.

Responder Con Cita
  #11  
Antiguo 04-06-2008
nasedo nasedo is offline
Miembro
 
Registrado: jun 2005
Posts: 24
Poder: 0
nasedo Va por buen camino
Cita:
Empezado por vroa74 Ver Mensaje
Hola:
sigo con el pequeño problema de no poder filtrar buen la base de datos, debe ser por algun detalle. el problema es cuando seleciono un rago de fechas es codigo que uso es:
Código Delphi [-] MyQuery1.SQL.Add('(Date_Format(servicios.f_ini,''%d/%m/%Y'') >= '+ QuotedStr(DateToStr(JvDateTimePicker1.Date)) +') AND ( Date_Format(servicios.f_ini,''%d/%m/%Y'') <='+ QuotedStr(DateToStr(JvDateTimePicker2.Date)) +')');


mas sin embargo me sigue haciendo cosas que no le veop sentido.
por ejemplo

si seleciono un rango de fecha 01/02/2008 al 04/06/2008 me da solo 3 registros y en la base de datos de prueba en ese rango de fecha hay 21 registros.
los registros que me da son lso que inicia con 1 y 2 de cada mes, tego registro con dias 15 19 20 22 30 de cada mes mas eso nos lo muestra..

es teoria deberia estar mostrando todos alguien me podria ayudar para saber en que estoy fallando.


mira compañero,

si quieres seleccionar en un rango de fechas utiliza en BETWEEN

algo asi:

Código Delphi [-]
var
  FIni, FFin  :String;
  A,M,D : Word;

DecodeDate(JvDateTimePicker1.Date,A,M,D);
FIni := IntToStr(A) + '-' + IntToStr(M)+ '-' + IntToStr(D);
DecodeDate(JvDateTimePicker2.Date,A,M,D);
FFin := IntToStr(A) + '-' + IntToStr(M)+ '-' + IntToStr(D);

MyQuery1.SQL.Add('WHERE servicios.f_ini BETWEEN '+QuotedStr(Fini) + ' AND ' + QuotedStr(FFin));


asi de sencillo!!! :P
ahi platicas si funcionó!!

Última edición por nasedo fecha: 04-06-2008 a las 21:05:31.
Responder Con Cita
  #12  
Antiguo 06-06-2008
Avatar de vroa74
vroa74 vroa74 is offline
Miembro
 
Registrado: jul 2006
Posts: 254
Poder: 18
vroa74 Va por buen camino
Question

Mucha gracias por la aclaración, no sabia la utilizacion del parametro.

mas sin embargo sigo teniendo problemas esta es mi sintaxis
cada ves que se le pega la gana me da el intervalo que le pido
si pido de 1/mayo/2008 5/junio/2008(01/05/2008 - 05/06/2008)
en ocasione me los hace bien y en otras me trae todo los datos del intervalo y adicionales y en otras me trae menos que las que se que hay en el intervalo

es un caso para la araña.

Código Delphi [-]
            MyQuery1.SQL.Add(' Date_Format(servicios.f_ini,''%d/%m/%Y'') BETWEEN '+ QuotedStr(DateToStr(JvDateTimePicker1.Date)) + ' AND ' + QuotedStr(DateToStr(JvDateTimePicker2.Date)) +'');
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
Ayuda para guardar fechas en mysql metroyd SQL 3 10-03-2008 05:30:02
ayuda para leer una fecha desde un txt negro_sto C++ Builder 5 24-02-2008 04:56:18
Ayuda por favor para correr un query en Delphi a una base de datos en Mysql charlyfitlh MySQL 10 01-11-2007 20:28:49
Extraer con un DbNavigator fecha para mostrarla en un DateTimePicker (BD MySQL) alan85 Varios 2 06-06-2007 17:12:23
Ayuda para iniciarme en esto de la base de datos MySql inexperto MySQL 5 28-05-2004 19:12:50


La franja horaria es GMT +2. Ahora son las 20:35:19.


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