Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Tablas planas (https://www.clubdelphi.com/foros/forumdisplay.php?f=20)
-   -   problema campo fecha/hora en access (https://www.clubdelphi.com/foros/showthread.php?t=81359)

jsc 07-11-2012 18:09:46

problema campo fecha/hora en access
 
2 Archivos Adjunto(s)
hola
tengo una bd en access con dos campos fecha/hora donde en uno almaceno la fecha y en otro la hora
desde delphi accedo a la bd por medio de BDE y utilizo un query para hacer consultas, insertar, borrar... registros
el problema es que el campo donde almaceno la hora me esta dando problemas;
Agrego registros de esta manera
Código Delphi [-]
var t:Ttime ;
...
t:=cbhoras.text+':'+cbminutos.text+':00' ;
edtid.text := formatdatetime('ddmmyyyyhhnnss',fh);
query1.SQL.Add('INSERT INTO CALENDARIO (Id,fecha,hora,evento,notas,estado,aviso,email)'+chr(13)
                    + ' VALUES (:id,:fecha,:hora,:evento,:notas,:estado,:aviso,:email)') ;
query1.ParamByName('id').asstring := edtid.Text ;
query1.ParamByName('fecha').asstring := datetostr(dtfecha.Date) ;
query1.ParamByName('hora').asstring := timetostr(t) ;
query1.ParamByName('evento').asstring := edtevento.Text ;
query1.ParamByName('notas').asstring := edtnotas.Text ;
query1.ParamByName('aviso').asstring := cboxaviso.text;
if checkboxaviso.State = cbchecked then query1.parambyname('estado').Value := true
                                                 else query1.ParamByName('estado').value := false ;
query1.ParamByName('email').asstring := edtemail.Text ;
...
el registro se agrega sin ningun problema; ahora bien, a la hora de mostrar los datos en el dbgrid ejecutando:
Código Delphi [-]
query1.SQL.Add('SELECT * FROM CALENDARIO WHERE FECHA >= :fecha ORDER BY FECHA') ;
query1.ParamByName('fecha').asstring := datetostr(monthcalendar1.Date) ;
en lugar de mostrar solo la hora, me agrega la fecha por delante; cosa que si miro en la bd de acces no ocurre;agrego dos imagenes donde puede verse lo que me ocurre; en delphi muestra la fecha por delante de la hora y el acces se muestra bien la hora
Código:

Id  Fecha        Hora
xxx 07/11/2012  30/12/1899 5:04:00

en cambio si pongo el campo hora en access como texto en lugar de como fecha/hora me guarda bien los datos pero eso no me interesa porque luego no puedo ordenar las consultas por fecha y por hora
no se que mas cambios hacer; he probado todo lo que se me ha ocurrido
Código Delphi [-]
formatdatetime('h:mm:ss',t)

Casimiro Notevi 07-11-2012 19:06:20

¿Pero por qué guardas la fecha y hora en formato texto?

jsc 07-11-2012 19:50:54

1 Archivos Adjunto(s)
Cita:

Empezado por Casimiro Notevi (Mensaje 448829)
¿Pero por qué guardas la fecha y hora en formato texto?

No.
Igual no me he explicado bien.
los campos fecha y hora son del tipo fecha/hora en access
hice una prueba y puse el campo hora como texto en access;pero logicamente eso NO me VALE puesto que necesito ordenar los campos por fecha y por hora

Neftali [Germán.Estévez] 07-11-2012 20:10:07

Cita:

Empezado por Casimiro Notevi (Mensaje 448829)
¿Pero por qué guardas la fecha y hora en formato texto?

Yo creo que por temas de ordenación, filtros y demás es mejor guardarlo como fecha hora, sino puede ser que las ordenaciones por fecha (por ejempo) no salgan como uno esperaría.

En cuanto al tema de la visualización, yo creo que simplemente eso eso, "problema de visualización", así que basta con que le digas al DBGrid o al DataSet que es ese lugar sólo quieres mostrar la hora.

jsc 07-11-2012 20:16:19

Cita:

Empezado por Neftali (Mensaje 448846)
Yo creo que por temas de ordenación, filtros y demás es mejor guardarlo como fecha hora, sino puede ser que las ordenaciones por fecha (por ejempo) no salgan como uno esperaría.

En cuanto al tema de la visualización, yo creo que simplemente eso eso, "problema de visualización", así que basta con que le digas al DBGrid o al DataSet que es ese lugar sólo quieres mostrar la hora.

gracias por el interes
no se que mas pruebas hacer;
como podria hacer eso que me comentas? decirle al dbgrid o al dataset que en el campo hora solo mostraria la hora?
si accedo a la bd desde el sql explorer de delphi, también aparecen los datos del campo hora con la fecha por delante; como digo, eso no pasa directamente viendo los datos en access
gracias

Neftali [Germán.Estévez] 07-11-2012 20:40:53

Por ejemplo, en el caso del DataSet, si usas una TTable o TQuery, con el botón derecho añades lo campos.
En las imágenes lo hago con TADOTable, pero con las demás debe ser igual.



Añades todos los campos:



Ahora en el campo que quieres (de tipo fecha/hora) en la propiedad DisplayFormat, puedes asignar la máscara que quieras. En tu caso para para las horas sería, HH:NN o HH:nn:ss (los minutos son NN)



Otra forma, por si quieres modificar el texto que se ve en la celda, es seleccionando el mismo campo de tipo fecha/hora (o cualquier otro), acceder al evento OnGetText de ese campo. Ahí también puedes modificar el formato o el texto que aparece.

Espero que te sirva. Dime si tienes algún problema.

jsc 07-11-2012 21:32:36

Cita:

Empezado por Neftali (Mensaje 448856)
Por ejemplo, en el caso del DataSet, si usas una TTable o TQuery, con el botón derecho añades lo campos.
En las imágenes lo hago con TADOTable, pero con las demás debe ser igual.

SOLUCIONADO!!!
Muchisimas gracias Neftali. Con tu ayuda y jugando con
Código:

formatdatetime('h:nn:ss',query1.fieldbyname('hora').value
he conseguido lo que me proponia

para comparar la hora me funciona de la siguiente manera
Código:

if query1.FieldByName('hora').value < formatdatetime('h:nn:ss',now)
para mostrar datos en un statusbar; asi
Código:

statusbar1.Panels[3].text := query1.fieldbyname ('fecha').AsString + ' '+query1.fieldbyname('hora').value;
una ultima cosa ya por curiosidad; esto que me ha ocurrido es normal o algo no tengo bien definido y de ahi todos estos problemillas?

Neftali [Germán.Estévez] 08-11-2012 09:29:37

Cita:

Empezado por jsc (Mensaje 448866)
una ultima cosa ya por curiosidad; esto que me ha ocurrido es normal o algo no tengo bien definido y de ahi todos estos problemillas?

Yo no he visto que tengas nada mal definido.

Un saludo.

jsc 09-11-2012 13:40:16

Cita:

Empezado por Neftali (Mensaje 448914)
Yo no he visto que tengas nada mal definido.

Un saludo.

Gracias nuevamente Neftali
Me has sido de gran ayuda


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

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