PDA

Ver la Versión Completa : Guardar Solo Hora usando DateTimePicker


georgejg
20-03-2008, 00:09:54
Hola a todos. :)

El problema es el siguiente:

1. Estoy usando una Base de Datos Oracle y en la tabla "PRUEBAS" tengo un campo lo llamaremos "HORA" de tipo Date.

2. Puedo ingresar varios datos tipo string, Number, etc..
3. Usando un DateTimePicker y la propiedad Kind a dtkDate mas un Trunc(DateTimePicker1.Date) puedo guardar solo la fecha.

4. Usando un DateTimePicker y cambiando su propiedad Kind a dtkTime el datetimepicker me muestra solo la Hora.

pero si lo quiero guardar en el Campo "HORA" el dateTimePicker de la siguente manera:



Código Delphi [-] (http://www.clubdelphi.com/foros/#)BDMasdata.TablePrueba.FieldByName('HORA').AsDateTime:= DateTimePicker2.Time;




pero me guarda tambien la fecha. :mad:

ahora mi pregunta es usando un DateTimePicker como puedo guardar solo la hora en una base de datos oracle teniendo en cuenta que el campo "HORA " es de Tipo Date.


se les agradece un pronta respuesta.

enecumene
20-03-2008, 14:08:26
Hola, es logico que en un campo tipo Date, cuando quieres grabar solo la hora es imposible, siempre te grabara la fecha, Oracle no tiene un campo tipo DateTime o solo TimeStamp?.

Saludos.

eduarcol
20-03-2008, 14:13:54
Agregando un poco a lo dicho por Fernando, si dices que Oracle no tiene un time eso es porq el date lo puede reemplezar, o sea que guarda el valor de tipo real, el entero para la fecha el decimal para la hora

Luis F. Orjuela
20-03-2008, 17:25:17
Bueno amigo, le cuento que SÍ se puede y es así:


var: Hora: Time;
var: Fecha: Date;

procedure .....
begin
Hora:= Frac(DateTimePicker1.Time);
Fecha:=Int(DateTimePicker1.Date);
end;



Con lo anterior te quiero decir que los campos DateTime en la parte entera guardan la fecha y en la parte fracción guardan la hora.

Un caluroso saludo desde BOGOTA - COLOMBIA

georgejg
22-03-2008, 15:32:36
Hola a Todos e probado lo q digiste Luis F. Orjuela pero:

1. me sale un error al querer declarar una variable tipo Time
2. al guardar directamente sin utilizar variable es decir:

BDMasdata.TablePrueba.FieldByName('HORA').AsDateTime:= Frac(DateTimePicker1.Time);

y en el DateTimePicker1.Time esta: 08:50:00 al guardarlo en la base de datos me sigue mostrando una fecha mas la hora es decir 12/01/1981 08:50: (los ultimos dos 0 no los muestra) .

les comento el tema en concreto.

necesito guardar la hora "en un campo unico" para luego en otra parte del aplicativo me permita realizar una consulta seleccinando la hora.

no se si me pudan recomenadar u orientar.

por ahora lo unico q se me ocurre es cambiar el datetimepicker por un maskedit y guardarlo como tipo string.

caulquier recomendacion es bienvenida :)

Luis F. Orjuela
22-03-2008, 16:45:46
Así como tú dices,, entonces debes declarar el campo de tu tabla en la base de datos del tipo "TIME" , pues así sólo guarda horas, minutos y segundos..
Ahora el campo tipo "DATE", pues guarda fechas, y la combinación de los dos es "TIMESTAMP" que guarda fecha y horas, minutos y segundos...

Teniendo en cuenta la explicación anterior.....

El error es el siguiente:

BDMasdata.TablePrueba.FieldByName('HORA').AsDateTime:= Frac(DateTimePicker1.Time);


debe ser:


BDMasdata.TablePrueba.FieldByName('HORA').AsTime:= Frac(DateTimePicker1.Time);




Suerte..

Lepe
23-03-2008, 10:12:29
Ya se ha dicho hasta la saciedad, pero lo repito una vez más para que se tenga en cuenta: Una hora sin su fecha asociada, no tiene toda la información completa.

Si después necesitas hacer cálculos con las horas, o incluso filtrar la información por esas horas, crea el campo de tipo TimeStamp. Es típico que después de tenerlo todo funcionando querer un listado de las últimas 24 horas, y como tengas por separado la hora de la fecha te resulta más engorroso.

Los cálculos (diferencias entre horas) sin tener en cuenta la fecha, puede darte dolores de cabeza. Teniéndo en cuenta la fecha, es una llamada a las rutinas de la unidad DateUtils de delphi.

Si solo quieres mostrar la hora, usa el DisplayFormat del campo a hh:nn:ss (lo negrita te faltará y por eso se come los segundos). Si después quieres hacer búsquedas de un sólo día tienes a tu disposición la fecha y hora. Muy útil para turnos que traspasen la medianoche.

Saludos