Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General »

Calcular Horas

Estas en el tema de Calcular Horas en el foro de Bases de Datos General en Foros del Web. Veamos, yo quiero hacer lo siguiente. Tengo una base de datos en la que quiero calcular las horas totales en las que un operario trabaja. ...

  #1 (permalink)  
Antiguo 05/03/2008, 10:00
Avatar de Koudelka  
Fecha de Ingreso: febrero-2008
Mensajes: 397
Antigüedad: 16 años, 2 meses
Puntos: 1
Calcular Horas

Veamos, yo quiero hacer lo siguiente. Tengo una base de datos en la que quiero calcular las horas totales en las que un operario trabaja. Dichas horas se guardan en el campo horas. Para calcular esas horas (y para que nadie le engañe al jefe), tengo que hacerlo de la siguiente manera.

Se me abre un formulario con los botones de inicio y otro de fin. Cuando se le pulsa a inicio, que se guarde la hora actual y guardarlo en el campo horainicio. Después, en el botón fin quiero hacer lo mismo, que al pulsar se guarde la hora y se guarde en el campo horafinal.

Una vez guardados esos campos, que se calcule las horas de diferencia para que al final me den las horas y que esa cuenta se guarde en el campo horas.

(realmente esto que tengo que hacer tiene más complicación, pero primero quiero ver si me sale esto >.<)
  #2 (permalink)  
Antiguo 05/03/2008, 10:10
Avatar de Taribo007  
Fecha de Ingreso: agosto-2007
Mensajes: 1.338
Antigüedad: 16 años, 8 meses
Puntos: 18
Re: Calcular Horas

Para obtener la hora del sitema tienes la funcion time(). Por ejemplo, para asiganar a un control llamado TxtHoraInicio la hora al pulsar un boton, pondrias en su evento click:

me.TxtHoraInicio=time()

Mira en la ayuda la funcion datediff, es para obtener la diferencia entre fechas.

Un saludo
  #3 (permalink)  
Antiguo 05/03/2008, 10:17
Avatar de Koudelka  
Fecha de Ingreso: febrero-2008
Mensajes: 397
Antigüedad: 16 años, 2 meses
Puntos: 1
Re: Calcular Horas

vale, lo del clik funciona, pero como guardo esas horas en la tabla? (necesito guardarlas >.<)
  #4 (permalink)  
Antiguo 05/03/2008, 10:23
Avatar de Taribo007  
Fecha de Ingreso: agosto-2007
Mensajes: 1.338
Antigüedad: 16 años, 8 meses
Puntos: 18
Re: Calcular Horas

Tienes dos opciones, depende de la estructura de los forms.
Opcion1: que el control (en el ejemplo TxtHoraInicio) tenga como origen de control el campo de la tabla donde lo quieres guardar, y para ello el form ha de tener como origen de registro la tabla en cuestion.

Opcion: una consulta de inserccion o de actualizacion.

Pero ya te digo que depende de como lo tengas montado.

Un saludo
  #5 (permalink)  
Antiguo 05/03/2008, 10:33
Avatar de Koudelka  
Fecha de Ingreso: febrero-2008
Mensajes: 397
Antigüedad: 16 años, 2 meses
Puntos: 1
Re: Calcular Horas

vale, ya se me guardan XD. He ido a mirar en ayuda lo del datediff y me da error XDDD asíq ue me parece que la parte de aydua en el programa está puffff
  #6 (permalink)  
Antiguo 05/03/2008, 10:35
Avatar de Taribo007  
Fecha de Ingreso: agosto-2007
Mensajes: 1.338
Antigüedad: 16 años, 8 meses
Puntos: 18
Re: Calcular Horas

Esto dice la ayuda. Yo lo que haria es calcular la diferencia con la funcion datediff en segundos, y luego pasarlo a ahoras, minutos y segundos:

COPIO********************************************* *
DateDiff (Función)


Devuelve un valor de tipo Variant (Long) que especifica el número de intervalos de tiempo entre dos fechas determinadas.

Sintaxis

DateDiff(intervalo, fecha1, fecha2[, primerdíasemana[, primerasemanaaño]])

La sintaxis de la función DateDiff consta de los siguientes argumentos con nombre:

Parte Descripción
Intervalo Requerido. Expresión de cadena con el intervalo de tiempo utilizado para calcular la diferencia entre fecha1 y fecha2.
Fecha1, fecha2 Requerido; Variant (Date). Las dos fechas que se van a utilizar en el cálculo.
Primerdíasemana Opcional. Constante que especifica el primer día de la semana. Si no se especifica, se asume que es el domingo.
Primerasemanaaño Opcional. Constante, que especifica la primera semana del año. Si no se especifica, se asume que es aquélla en la que se encuentre el 1 de enero.



Valores

El argumento intervalo toma los valores siguientes:

Intervalo Descripción
yyyy Año
q Trimestre
m Mes
y Día del año
d Día
w Día de la semana
ww Semana
h Hora
n Minuto
s Segundo



El argumento primerdíasemana toma los siguientes valores:

Constante Valor Descripción
vbUseSystem 0 Utilice la configuración de la API de NLS.
vbSunday 1 Domingo (predeterminado)
vbMonday 2 Lunes
vbTuesday 3 Martes
vbWednesday 4 Miércoles
vbThursday 5 Jueves
vbFriday 6 Viernes
vbSaturday 7 Sábado



Constante Valor Descripción
vbUseSystem 0 Utilice la configuración de la API de NLS.
vbFirstJan1 1 Empieza con la semana en la que se encuentra el 1 de enero (predeterminado).
vbFirstFourDays 2 Empieza con la primera semana que tenga al menos cuatro días en el nuevo año.
vbFirstFullWeek 3 Empieza con la primera semana que esté completamente incluida en el nuevo año.



Comentarios

Puede utilizar la función DateDiff para determinar el número de intervalos especificados que existen entre dos fechas. Por ejemplo, con DateDiff podría calcular el número de días entre dos fechas o el número de semanas entre hoy y el final del año.

Si desea saber el número de días entre fecha1 y fecha2, puede utilizar Día del año ("y") o Día ("d"). Cuando intervalo es Día de la semana ("w"), DateDiff devuelve el número de semanas entre las dos fechas. Si fecha1 es lunes, DateDiff contará el número de lunes hasta fecha2. En la cuenta incluirá fecha2, pero no fecha1. Si intervalo es Semana ("ww"), la función DateDiff devolverá el número de semanas entre las dos fechas. En este caso contará el número de domingos entre fecha1 y fecha2. DateDiff contará fecha2 si es domingo, pero no fecha1, aunque sea domingo.

Si fecha1 se refiere a un momento posterior en el tiempo a fecha2, la función DateDiff devolverá un número negativo.

El argumento primerdíasemana afecta a los cálculos que utilizan "w" y "ww" como símbolos de intervalo.

Si fecha1 o fecha2 es un literal de fecha, el año, si se especifica, pasará a ser una parte permanente de la fecha. Sin embargo, si fecha1 o fecha2 está comprendida entre comillas dobles ("") y se omite el año, se insertará el año en curso en el código cada vez que se evalúe la expresión fecha1 o fecha2. Así es posible escribir código que se pueda usar en años distintos.

Cuando compara el 31 de diciembre con el 1 de enero del año siguiente, DateDiff para un año ("yyyy") devolverá 1 aunque sólo haya pasado un día.

Nota Para fecha1 y fecha2, si la configuración de la propiedad Calendar es gregoriano, la fecha proporcionada debe ser gregoriano. Si el calendario es Hijri, la fecha proporcionada debe ser Hijri.

FIN COPIA********************************************* ******
  #7 (permalink)  
Antiguo 05/03/2008, 10:39
Avatar de Koudelka  
Fecha de Ingreso: febrero-2008
Mensajes: 397
Antigüedad: 16 años, 2 meses
Puntos: 1
Re: Calcular Horas

entonces yo tendría que poner esto?:

DateDiff(intervalo, HoraInicial, HoraFinal)
  #8 (permalink)  
Antiguo 05/03/2008, 10:48
Avatar de Taribo007  
Fecha de Ingreso: agosto-2007
Mensajes: 1.338
Antigüedad: 16 años, 8 meses
Puntos: 18
Re: Calcular Horas

Efectivamente, poniendo el intervalo entre comillas, por ejemlpo para los segundos:

DateDiff("s", HoraInicial, HoraFinal)

un saludo
  #9 (permalink)  
Antiguo 05/03/2008, 10:53
Avatar de Koudelka  
Fecha de Ingreso: febrero-2008
Mensajes: 397
Antigüedad: 16 años, 2 meses
Puntos: 1
Re: Calcular Horas

pero entonces después de haberlo calculado en segundos.... cómo lo paso a horas? porque no creoque se pueda ponerlo en el mismo campo (de hecho, ahora que lo pienso, no se donde se coloca eso o_O)
  #10 (permalink)  
Antiguo 05/03/2008, 11:13
Avatar de Taribo007  
Fecha de Ingreso: agosto-2007
Mensajes: 1.338
Antigüedad: 16 años, 8 meses
Puntos: 18
Re: Calcular Horas

Si tubieras en el origen de control de un cuadro de texto llamado TxtTiempoTrancurrido el campo de la tabla donde quieres guardar precisamente eso, podrias hacer lo siguiente, por ejemplo, al introducir la hora de salida:

Primero copia esta funcion en un modulo:

Public Function HoraMinutosSegundos(Seg As Integer) As Date
Dim Horas As Integer
Dim Minutos As Integer

Horas = Int(Seg / 360)
Seg = Seg - Horas * 360

Minutos = Int(Seg / 60)
Seg = Seg - Minutos * 60

HoraMinutosSegundos = TimeSerial(Horas, Minutos, Seg)
End Function

Y en el boton de hora de salida:

me.TxtTiempoTrancurrido=HoraMinutosSegundos(DateDi ff("s", TxtHoraInicial, TxtHoraFinal)
)

Un saludo
  #11 (permalink)  
Antiguo 06/03/2008, 02:17
Avatar de Koudelka  
Fecha de Ingreso: febrero-2008
Mensajes: 397
Antigüedad: 16 años, 2 meses
Puntos: 1
Re: Calcular Horas

creo que aún estoy dormida... qué módulo?
  #12 (permalink)  
Antiguo 06/03/2008, 02:20
Avatar de Taribo007  
Fecha de Ingreso: agosto-2007
Mensajes: 1.338
Antigüedad: 16 años, 8 meses
Puntos: 18
Re: Calcular Horas

En un modulo, en culaquiera. Si no tienes ninguno crea uno nuevo (yo siempre tengo uno llamado funciones) y pegas ahi el codigo. Como la funcion es publica, se puede acceder a ella desde cualquier parte de tu bd

Un saludo
  #13 (permalink)  
Antiguo 06/03/2008, 02:50
Avatar de Koudelka  
Fecha de Ingreso: febrero-2008
Mensajes: 397
Antigüedad: 16 años, 2 meses
Puntos: 1
Re: Calcular Horas

Pero esto:

me.TxtTiempoTrancurrido=HoraMinutosSegundos(DateDi ff("s", TxtHoraInicial, TxtHoraFinal)

que lo pongo junto con la opción que tengo puesta de darle clic?
  #14 (permalink)  
Antiguo 06/03/2008, 03:00
Avatar de Taribo007  
Fecha de Ingreso: agosto-2007
Mensajes: 1.338
Antigüedad: 16 años, 8 meses
Puntos: 18
Re: Calcular Horas

Te proponia que lo hicieras en el boton que pulsa el empleado para introducir la hora final, en ese momento ya tienes los datos necesarios para hacer el calculo, y si la hora inicio, hora fin y tiempo trancurrido esta en la misma tabla, esta sera origen de registro del form donde esta ese boton y podras tener un cuadro de texto alq ue yo he llamada TxtTiempoTrancurrido con origen de control el campo de la tabla donde quieres guaradr la diferencia.

Un saludo
  #15 (permalink)  
Antiguo 06/03/2008, 03:10
Avatar de Koudelka  
Fecha de Ingreso: febrero-2008
Mensajes: 397
Antigüedad: 16 años, 2 meses
Puntos: 1
Re: Calcular Horas

Yo lo pongo de esta manera:

Private Sub fin_Click()
Me.TxtHoraFinal = Time()
me.TxtTiempoTrancurrido=HoraMinutosSegundos(DateDi ff("s", TxtHoraInicial, TxtHoraFinal)
End Sub

y me da error >.<
  #16 (permalink)  
Antiguo 06/03/2008, 03:13
Avatar de Taribo007  
Fecha de Ingreso: agosto-2007
Mensajes: 1.338
Antigüedad: 16 años, 8 meses
Puntos: 18
Re: Calcular Horas

Y que error te da??

un saludo
  #17 (permalink)  
Antiguo 06/03/2008, 03:16
Avatar de Koudelka  
Fecha de Ingreso: febrero-2008
Mensajes: 397
Antigüedad: 16 años, 2 meses
Puntos: 1
Re: Calcular Horas

Error de compilación en la línea del tiempo transcurrido.

He intentado arreglarlo juntado ls dos f con la palabra DateDi, pero me da el mismo error
  #18 (permalink)  
Antiguo 06/03/2008, 03:21
Avatar de Taribo007  
Fecha de Ingreso: agosto-2007
Mensajes: 1.338
Antigüedad: 16 años, 8 meses
Puntos: 18
Re: Calcular Horas

Tienes esto exactamente asi???

Private Sub fin_Click()
Me.TxtHoraFinal = Time()
me.TxtTiempoTrancurrido=HoraMinutosSegundos(DateDi ff("s", TxtHoraInicial, TxtHoraFinal)
End Sub

Deberia estar asi:

Private Sub fin_Click()
Me.TxtHoraFinal = Time()
me.TxtTiempoTrancurrido=HoraMinutosSegundos(DateDiff("s", TxtHoraInicial, TxtHoraFinal)
End Sub

Un saludo
  #19 (permalink)  
Antiguo 06/03/2008, 03:27
Avatar de Koudelka  
Fecha de Ingreso: febrero-2008
Mensajes: 397
Antigüedad: 16 años, 2 meses
Puntos: 1
Re: Calcular Horas

me sigue dando error
  #20 (permalink)  
Antiguo 06/03/2008, 03:30
Avatar de Taribo007  
Fecha de Ingreso: agosto-2007
Mensajes: 1.338
Antigüedad: 16 años, 8 meses
Puntos: 18
Re: Calcular Horas

Y que error te da ahora???
Has copiado la funcion en un modulo????
Hay un cuadro de texto en el form con este nombre TxtTiempoTrancurrido)
???
Y otro con este TxtHoraInicial???
Y otro con este TxtHoraFinal???

Un saludo
  #21 (permalink)  
Antiguo 06/03/2008, 03:34
Avatar de Koudelka  
Fecha de Ingreso: febrero-2008
Mensajes: 397
Antigüedad: 16 años, 2 meses
Puntos: 1
Re: Calcular Horas

tengo todo eso y me da el error de antes
  #22 (permalink)  
Antiguo 06/03/2008, 03:37
Avatar de Koudelka  
Fecha de Ingreso: febrero-2008
Mensajes: 397
Antigüedad: 16 años, 2 meses
Puntos: 1
Re: Calcular Horas

igual es que no he cargado bien el módulo?
  #23 (permalink)  
Antiguo 06/03/2008, 03:44
Avatar de Taribo007  
Fecha de Ingreso: agosto-2007
Mensajes: 1.338
Antigüedad: 16 años, 8 meses
Puntos: 18
Re: Calcular Horas

Vamos a probar si lo has hecho bien. Pon un boton en cualquir form, y en su evento click lo siguiente:

MsgBox HoraMinutosSegundos(3600)

Si esta bien, te saldra un mensaje en el que pondra: 10:00:00

un saludo
  #24 (permalink)  
Antiguo 06/03/2008, 03:47
Avatar de Koudelka  
Fecha de Ingreso: febrero-2008
Mensajes: 397
Antigüedad: 16 años, 2 meses
Puntos: 1
Re: Calcular Horas

lo he puesto en el mismo formulario donde tengo los botones de inicio y fin y si que me sale eso
  #25 (permalink)  
Antiguo 06/03/2008, 04:01
Avatar de Taribo007  
Fecha de Ingreso: agosto-2007
Mensajes: 1.338
Antigüedad: 16 años, 8 meses
Puntos: 18
Re: Calcular Horas

Esta bien entonces. Vamos a intentar ver donde esta le error: pon esto en el boton del fin:

Falta un parentesis en esa linea, te lo pongo en rojo:

Private Sub fin_Click()
Me.TxtHoraFinal = Time()
me.TxtTiempoTrancurrido=HoraMinutosSegundos(Datedi ff ("s", TxtHoraInicial, TxtHoraFinal))
End Sub

Un saludo
  #26 (permalink)  
Antiguo 06/03/2008, 04:03
Avatar de Taribo007  
Fecha de Ingreso: agosto-2007
Mensajes: 1.338
Antigüedad: 16 años, 8 meses
Puntos: 18
Re: Calcular Horas

No se por que sale el datediff separado, yo lo veo junto al escribir el mensaje y al editarlo, pero cuando lo envio sale separado. No le hagas caso, va junto.

Un saludo
  #27 (permalink)  
Antiguo 06/03/2008, 04:04
Avatar de Koudelka  
Fecha de Ingreso: febrero-2008
Mensajes: 397
Antigüedad: 16 años, 2 meses
Puntos: 1
Re: Calcular Horas

me sigue dando error de sintaxis. Es curioso que cuando lo copi antes de guardar la frase está roja, será por el ) que has puesto rojo?.

igual es que hay que poner de otra manera hora minutos y segundos o_O
  #28 (permalink)  
Antiguo 06/03/2008, 04:08
Avatar de Koudelka  
Fecha de Ingreso: febrero-2008
Mensajes: 397
Antigüedad: 16 años, 2 meses
Puntos: 1
Re: Calcular Horas

a ver, me he fijado de que volvía a estar separado DateDi ff, lo he juntado y me da error "6"

  #29 (permalink)  
Antiguo 06/03/2008, 04:20
Avatar de Taribo007  
Fecha de Ingreso: agosto-2007
Mensajes: 1.338
Antigüedad: 16 años, 8 meses
Puntos: 18
Re: Calcular Horas

A ver que valores estamos mandando a la funcion, prueba estO

Private Sub fin_Click()
Me.TxtHoraFinal = Time()

msgbox TxtHoraInicial
msgbox TxtHoraFinal
msgbox Datedi ff ("s", TxtHoraInicial, TxtHoraFinal)
msgbox HoraMinutosSegundos(Datedi ff ("s", TxtHoraInicial, TxtHoraFinal))

'me.TxtTiempoTrancurrido=HoraMinutosSegundos(Dated i ff ("s", TxtHoraInicial, TxtHoraFinal))
End Sub

Un saludo
  #30 (permalink)  
Antiguo 06/03/2008, 04:25
Avatar de Koudelka  
Fecha de Ingreso: febrero-2008
Mensajes: 397
Antigüedad: 16 años, 2 meses
Puntos: 1
Re: Calcular Horas

me da error de sintaxis y antes de probarlo me marcaba en rojo las siguientes lineas (donde da el error justamente)

msgbox Datedi ff ("s", TxtHoraInicial, TxtHoraFinal)
msgbox HoraMinutosSegundos(Datedi ff ("s", TxtHoraInicial, TxtHoraFinal))
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 00:32.