 |
Club Builder Foro de C++Builder en español
|
| Ver tema anterior :: Ver tema siguiente |
| Autor |
Mensaje |
mdosal Invitado
|
Publicado: Mar 08 Jun, 2004 12:00 pm Asunto: Guardar solo la hora en un campo DATE |
|
|
Tengo una base de datos en SQL, creada con Interbase Windows ISQL.
Uno de los campos (DBEHORA_RECEPCION) es de tipo DATE. En un de los formularios, utilizo un DateTimePicker (DTPHora) con el Kind=dtkTime para seleccionar la hora.
Lo paso al campo a guardar de la siguiente forma:
TDateTime DateTime = DTPHora->Time;
DBEHORA_RECEPCION->Text = TimeToStr(DateTime);
El caso es que luego en la base de datos me ha guardado la fecha y la hora. ¿como puedo hacer para que solo se guarde la hora, sin ninguna fecha? ¿necesito cambiar algo en la base de datos? .
He probado a definir el campo DBEHORA_RECEPCION de tipo TIME pero el script .sql en Interbase Windows ISQL no me lo acepta, me da error
Un saludo |
|
| Volver arriba |
|
 |
Snake + + Lt


Registrado: 31 Oct 2002Mensajes: 83Ubicación: Zacatecas, Zac. Mexico
|
Publicado: Jue 10 Jun, 2004 3:47 am Asunto: |
|
|
hola que tal.
no se si te funcione, pero yo uso esta forma para capturar la pura hora del sistema:
| Código: | Tabla_Registros->FieldByName("Hora_Entrada")->AsString=TimeToStr(Time()); |
No se si esto es lo que quieras, pero por lo menos puedes darte una idea.[/quote] _________________ I.S.C. Joel Salinas Alvarado
Linux User:454009
the human knowledge belong to the world
"Hoy el Universo Debian es mas GRANDE"
Zacatecas, Mexico. |
|
| Volver arriba |
|
 |
SirQiT Cdt

Registrado: 09 Sep 2003Mensajes: 12Ubicación: chihuahua, chih. mex.
|
Publicado: Mie 14 Jul, 2004 6:27 pm Asunto: |
|
|
Saludos
Un campo Date en un abase da datos se compone de dos partes.
El entero que sirve para guardar el incrementeo en días de una fecha definida, (generalmente el 30 de diciembre de 1899) y una parte que es una fracción decimal de un entero que representa el incremento de horas, minutos y segundos de un día.
Por lo tanto no es posible guardar solo la hora, hay que guardar hora y fecha. Aún y cuando guardaras un valor entero de 0 y la hora decimal (0.25) tendrías un valor de 30 de diciembre de 1899 6:00 a.m.
Te recomiendo que guardes la hora, el minuto y el segundo por separado, en un entero cada uno (no se si exista el tipo smallint o tinyint en tu motor de base de datos los que serían mejores para el caso), así solo tienes que utilizar la función un DecodeTime para obtener los valores que irán a tu base de datos. |
|
| Volver arriba |
|
 |
XyVy Master


Registrado: 25 Ago 2002Mensajes: 557Ubicación: Murcia (España)
|
Publicado: Mie 14 Jul, 2004 7:11 pm Asunto: |
|
|
El problema viene probablemente si estas utilizando Interbase 6.0 en adelante o Firebird 1.0x en adelante, el problema es el siguiente en Interbase 6.0 se introdujeron los Dialectos, por compatibilidad con las anteriores versiones hay que utilizar el Dialecto 1, donde existen los tipos TIMESTAMP, pero NO existen los tipos DATE ni TIME, sin embargo en el Dialecto 3, que es donde se usa todo el potencia de las nuevas versiones de Interbase o Firebird, tienes tanto los tipos DATE, TIME como TIMESTAMP. Logicamente TIMESTAMP, almacena una marca de tiempo desde no sé que fecha (la típica esa digo yo de 1960 o algo así), por lo que se guarda tanto la hora como la fecha.
Aun así no deberías tener problema al leer o guardar este valor, sabiendo con lo que estas trabajando.
Creo que por ahí ya hablamos de esto, buscalo por el foro con la opción buscar ahora no recuerdo el POST concreto.
Yo la verdad es que para las BD en las que uso Dialect 1, para las horas (donde solo quiero hora a la fuerza) uso un varchar de 10, pero esto como digo son chapuzas mías... Aunque siempre puedes hacer un CAST en la propia consulta para convertir un valor, por cierto si quieres también puedes utilizar EXTRACT para extraer partes concretas de un campo TIMESTAMP... y así fabricarte tu HORA a tu gusto en una consulta, mirate la ayuda, (no estoy en casa ahora), pero en cuanto llegue esta noche te pongo como podrías construir una HORA o una FECHA desde un TIMESTAMP haciendolo en una consulta SQL.
Ciao. _________________ OJO!! Ya tenemos subforo de Bases de Datos!!
Gracias a los admins. |
|
| Volver arriba |
|
 |
|
|
No puedes publicar temas nuevos en este foro No puedes responder a temas en este foro No puedes editar tus mensajes en este foro No puedes borrar tus mensajes en este foro No puedes votar en las encuestas de este foro
|
© 2002–2026 Club Builder · Funciona con phpBB.
|