PDA

Ver la Versión Completa : Hora en un dbgrid


Nbull
19-12-2005, 13:26:56
Hola A tod@s, estoy trabajando con access, delphi7 y componentes Ado, tengo un dbgrid enlazado a traves de un Adoquery con consulta sql a un campo llamado [Hora].

El problema que tengo es que me muestra una fecha y seguido la hora que guarde cuando entro el usuario y yo solo quiero que me muestre la hora.

He buscado por los foros y no he encontrado nada. No se si alguien me podra echar una mano.

Un saludo y gracias.

vtdeleon
19-12-2005, 14:18:06
Saludos

Busca la propiedad DisplayFormat del campo y establece el formato que deseas desplegar 'hh:mm:ss'. No lo he probado, solo supongo que funcionara;)

yusnerqui
19-12-2005, 14:21:39
En el diseño de tu tabla de Access debes asignar el formato que desees, por ejemplo: "Hora corta", al campo Fecha/Hora, y eso bastará para que se muestre correctamente en Delphi.

Saludos.

Nbull
19-12-2005, 16:36:57
Hola Vtdeleon no encuentro la Propiedad DisplayFormat del Dataset tengo el siguiente Código:


DataSAccesos.DataSet.Fields[1].dispalyFormat:='hh:nn:ss';

Me dice que identificador sin declarar.¿Me puedes decir como llamas tu a esa propiedad?

Gracias.

vtdeleon
19-12-2005, 18:28:40
Saludos

Esa propiedad se consigue mediante el Editor de campo (Fields Editor) del dataset. Agregas los campos que tiene la tabla, seleccionas el campo, de inmediato aparece la propiedad en el Object Inspector.

ronalg
20-12-2005, 16:24:03
uses DateUtils;
Campo:=Timeof(Valor);


Campo puede ser cualquier TDateTime o TTime sea nativo de delphi o de la base de datos

Valor puede ser también TDateTime, TTime o TDate sea nativo d dlephi o de la base de datos

existe tambien un dateof( )

Nbull
21-12-2005, 10:03:28
Gracias a los dos por responderme, en primer lugar he mirado lo que me dijiste Vtdeleon y sigo sin encontrar esa propiedad en el object inspector, debo ser un zoquete por que le he dado mil vueltas y no lo encuentro¿Esta dentro de las propiedades del adoquery o del Dbgrid?


Ronalg, no se a que te refieres cuando dices


uses DateUtils;Campo:=Timeof(Valor);¿Que propiedad del campo modificas?
¿A que te refieres con valor?:confused:

Gracias de nuevo a los dos un saludo.

ronalg
22-12-2005, 01:12:06
Supongo que para meter datos al campo del tipo DATE haces algo asi:


table.insert;
table.fieldbyname('hora').value:=Now;
o
table.fieldbyname('hora').value:=date();
o
table.fieldbyname('hora').value:=today();
o
table.fieldbyname('hora').value:=time;
o
//si estas usando un componente calendario
table.fieldbyname('hora').value:=calendario.date;
.
.
.
.
.
table.post


todos estos (now, date(), today(), time) contiene valores del tipo TDateTime que esta definido asi:


type TDateTime = type Double;



Description

Most VCL objects represent date and time values using the TDateTime type. The integral part of a TDateTime value is the number of days that have passed since 12/30/1899. The fractional part of a TDateTime value is fraction of a 24 hour day that has elapsed.

Following are some examples of TDateTime values and their corresponding dates and times:

0 12/30/1899 12:00 am
2.75 1/1/1900 6:00 pm
-1.25 12/29/1899 6:00 am
35065 1/1/1996 12:00 am
To find the fractional number of days between two dates, simply subtract the two values, unless one of the TDateTime values is negative. Similarly, to increment a date and time value by a certain fractional number of days, add the fractional number to the date and time value if the TDateTime value is positive.
When working with negative TDateTime values, computations must handle time portion separately. The fractional part reflects the fraction of a 24-hour day without regard to the sign of the TDateTime value. For example, 6:00 am on 12/29/1899 is –1.25, not –1 + 0.25, which would be –0.75. There are no TDateTime values between –1 and 0.


osea que contiene si o si la fecha y la hora siempre.

para sacar solo la hora sin la fecha debes hacer uso de DATEOF y para sacar solo la hora de TIMEOF, estas funciones estan en la unidad "DateUtils" que debes ponerla a mano en el USES de tu unidad.


table.insert;
table.fieldbyname('hora').value:=timeof(Now);
o
table.fieldbyname('hora').value:=timeof(date());
o
table.fieldbyname('hora').value:=timeof(today());
o
table.fieldbyname('hora').value:=timeof(time);
.
.
.
.
table.post


Esto extraera solo la hora.

espero te sirva

yusnerqui
22-12-2005, 13:57:26
Hola

Disculpa mi insistencia pero, ya probaste la recomendación que te di de:


En el diseño de tu tabla de Access debes asignar el formato que desees, por ejemplo: "Hora corta", al campo Fecha/Hora, y eso bastará para que se muestre correctamente en Delphi.
eso a mi me funciona perfectamente, a ti no??:confused:

Saludos

Nbull
23-12-2005, 10:49:27
Hola

Disculpa mi insistencia pero, ya probaste la recomendación que te di de:

eso a mi me funciona perfectamente, a ti no??:confused:


Yunerqui no se por que pero a mi no me funciona, el campo Hora de mi base de datos es del tipo Fecha/Hora y como mascara Hora Corta.


Supongo que para meter datos al campo del tipo DATE haces algo asi:

Ronalg, no lo hago asi, dado que trabajo con componentes AdoQuery, y hago consultas del tipo SELECT * FROM....

Gracias a los dos por intentar ayudarme, seguire investigando, si hay alguien que pueda hecharme una mano le estare muy agradecido.

Un saludo y gracias de nuevo.

yusnerqui
16-01-2006, 16:20:42
Creo que me tardé un poco para esta respuesta, quezás ya encontraste la solución, pero de cualquier manera será útil para futuros usuarios con el mismo problema.

Tu me dices que:


el campo Hora de mi base de datos es del tipo Fecha/Hora y como mascara Hora Corta


Pero yo no te hablo de máscara sino de FORMATO, pon el formato a hora corta y después nos cuentas.

Saludos Yusnerqui

Fernando
16-01-2006, 17:21:59
Hola Delphimaniacos:

(adoquery1.fieldbyname('fecha') AS TDateTimeField).DisplayFormat:= 'hh:nn:ss'

Saludos.

Nbull
16-01-2006, 18:29:59
Hola Yusnerqui y Fernando ( por cierto, Tocayo mio;) ),me funcionó la solución de Fernando.Muchisimas gracias a los dos.

Un saludo.