Suma de horas

Hola, estoy creando un formulario que trabaja enlazado con una tabla y esta tabla contiene varios campos (tiempo1, tiempo2, etc.) donde se ingresan las horas o minutos según el caso . Mi pregunta es: como hago para que cada vez que agregue una hora o 15 minutos por ejemplo, el sistema me sume lo ingresado automáticamente y me muestre el resultado de dicha suma en un label.
Espero su pronta respuesta, gracias.

2 respuestas

1
Respuesta de
Alguna vez hice un algoritmo con las condiciones que requieres si gustas pásame tu correo para enviártelo y te doy una posible solución.ç
Gracias.
Añade un comentario a esta respuesta
1
Respuesta de
No se si entiendo muy bien lo que preguntas te propongo dos soluciones
1.- Función para calcular fechas
Cualquier lenguaje de programación suele tener la función dateadd o datediff para sumar o restar una fecha a otra
en VB:
dateadd(intervalo, valor, fecha)
Intervalo es para indicar que tipo de datos vamos a añadir, pueden ser días, horas, minutos, años.
Valor es el número que añadimos
Fecha es la fecha que quieres modificar
Algo así
dateadd(d,15,mi_fecha)
esto le suma 15 días a mi fecha
dateadd(n,30,mi_fecha)
esto le suma 30 minutos a mi fecha
dateadd(y,2,mi_fecha)
Esto le suma 2 años a mi fecha
la propia función calcula el resultado final si se pasa de año de mes o de día
Depende del lenguaje que quieras utilizar variará la notación
Luego siempre harás
label.value=mi_fecha  para que la etiqueta la muestre
opción 2:
tu metes en el campo1 horas y en campo2 minutos
necesitas un recorset para acceder a la tabla para ejecutar la consulta
select sum(campo1), sum(campo2) from tabla
esto te devuelve el número total de horas y de minutos de la tabla pero no en formato fecha puede darte por ejemplo  32 horas y 132 minutos. Por lo tanto puedes pasarlo todo a minutos primero y luego tienes que calcular tu los datos
32x60=1920  minutos
1920 + 132 =2052 
2052 mod 60=34 horas y 12 minutos
34 mod 24= 1 dia 10 horas
label.value=1 dia 10 horas 12 minutos
No se si estoy cerca o lejos porque no entiendo muy bien la pregunta
si aclaras un poco más
Saludos
Lo que me hablas en la segunda opción es lo que yo quiero, yo estoy trabajando con visual fox pro 6.0 pero quisiera que el resultado fuera así: 00:00 (sumando lógicamente todas las horas con sus respectivos minutos del tiempo1, tiempo2, etc) .
Te lo explico de una manera más sencilla para ver si me entiendes:
Tengo una tabla llamada usuario que se compone de: camponombres_y_apellidos, campotiempo1, campotiempo2, campotiempo3, etc y campotiempototal
de manera que cuando yo ingrese por ejemplo en el campotiempo1 (00:45) y en el campotiempo2 ingrese (1:00) esto se me sume automáticamente y me muestre en campotiempototal el resultado de dicha suma, que en este caso seria 1:45
espero que te haya quedado más claro y me puedas ayudar, porque no se como sumar dichos campos con el formato de horas y minutos...
Vaya quizá me he equivocado porque no sabia que la pregunta es de foxpro, pero a ver si te puedo ayudar.
El problema es el tipo de dato de los campos campotiempo. No se muy bien como llega el valor 1:30 a la tabla
Tienes dos opciones guardarlo como minutos en un entero o en un campo de tipo datetime:
Guardar los datos siempre como minutos
El problema es guardar en la tabla con ese formato 01:30, ya que es un formato de fecha, y para leerlo o lo lees como cadena o como fecha, creo que es más cómodo guardarlo todo en la misma unidad (minutos) y será más fácil para ti manejar esos datos
si lo lees de un formulario los valores por ejemplo, yo cortaría por los dos puntos, multiplicas el primer valor (las horas) por 60 le sumas el segundo y en la tabla guardas los minutos:
en el caso de 1:30
Cortas y te queda 1 y 30
1x60 +30 =90 minutos y lo guardas en campotiempo1
en campotiempo2 tendremos 30 por ejemplo
cuando tengas que calcular el total usa la función hour() o time() que te devuelve una hora.
No se si a Time() le tienes que pasar minutos o segundos:
minutos=campotiempo1+campotiempo2   (120)
Minutos=seconds(minutos) esto si hay que pasarlo a segundos
tiempototal=time(minutos), devolverá 02:00:00
y ahora ya puedes guardar todos los datos en la tabla campotiempo1 (90), campotiempo2 (30 )y tiempototal (02:00:00).
Si utilizas un tipo de datos time para el total almacenará horas minutos y segundos.
La otra opción sería utilizar campos de tipo datetime o time
el datetime te va a obligar a meter también la fecha
si por ejemplo son las horas trabajas en un día tu guardas todo la fecha y hora por ejemplo.
campotiempo1=  10/03/2010 01:30:00
campotiempo2= 10/03/2010 00:30:00
sumamos los dos valores
tiempo =datetime(campotiempo1) + datetime(campotiempo2)
Al ser variables de tipo datetime tiempo tendrá este valor 10/03/2010 02:00:00
para calcular el total entonces coges
la fecha sumada menos la fecha inicial
tiempototal=datetime(tiempo) -datetime(10/03/2010) tendrías que coger la fecha de uno de los campos fecha y cortar solo la parte de la fecha, al pasarlo por datetime quedará 10/03/2010 00:00:00
la resta de dos datetime nos devuelve un valor en segundos en este caso 7200
10/03/2010 02:00:00 -10/03/2010 00:00:00 =   7200
tiempototal=hour(tiempototal) esto lo pasa a horas de nuevo.
En esta web hay un resumen de como manejar campos de fecha y muchas de las funciones existentes, incluso viene el código para que te hagas una función que reste dos fechas que le pasas como parámetro.
 Diferencias entre dos variables DateTime
http://www.portalfox.com/index.php?name=News&file=article&sid=1162&mode=nested&order=0&thold=0
te todas formas si la fecha no te interesa entonces utilizar tipo de dato datetime te va a complicar todo, mejor la opción 1 lo pasas todo a minutos si puede ser claro.
Si ves que no te ayudo mucho reabre y descarto la pregunta
saludos
Añade un comentario a esta respuesta
Añade tu respuesta
Haz clic para o
Escribe tu mensaje
¿No es la respuesta que estabas buscando? Puedes explorar otras preguntas de los temas Visual Fox ProProgramación o hacer tu propia pregunta: