Ver Mensaje Individual
  #4 (permalink)  
Antiguo 26/06/2008, 02:50
Avatar de Taribo007
Taribo007
 
Fecha de Ingreso: agosto-2007
Mensajes: 1.338
Antigüedad: 17 años, 5 meses
Puntos: 18
Respuesta: Cálculos con horas previamente encadenadas en campo texto

Intenta lo siguiente. Copia esta funcion en un modulo:

Public Function CalculoHorasMarcajes(Marcaje As String) As String
Dim miArgumentos() As Variant

misArgumentos = Split(Marcaje, "-")
Select Case UBound(misArgumentos) + 1
Case 1
CalculoHorasMarcajes = "Solo 1 Marcaje"
Case 2
'Diferencia en segundos
CalculoHorasMarcajes = DateDiff("s", misArgumentos(0), misArgumentos(1))
Case 3
CalculoHorasMarcajes = "Solo Numero Impar (3)"
Case 4
'Diferencia en segundos
CalculoHorasMarcajes = DateDiff("s", misArgumentos(0), misArgumentos(1)) + DateDiff("s", misArgumentos(2), misArgumentos(3))
Case Else
CalculoHorasMarcajes = "Caso aun sin contemplar"
End Select
End Function

A la funcion le pasas el contenido del campo marcajesx. Lo que hace con la funcion split, es introducir en cada posicion de un array, cada argumento que haya en el texto pasado, y que este separado por ele delimitador que indiques en el segundo argumento de la funcion split (en este caso el guion "-"). Ya tenemos separados los marcajes. Luego, en funcion de los marcajes que haya, actuara de una forma u otra (solo he puesto 4, puedes añadir mas).
La diferencia entre los marcajes la hace en segundos. Si la necesitas en otro formato, es cuestion de transformar los segundos en lo que quieras.

Para usarla, crea una nueva consulta, con la tabla Marcajes_persona y sus campos, y un campo nuevo asi:

NuevoCampo: CalculoHorasMarcajes([MarcajesX])

Ejecuta la sentencia y comenta los resultados.

Es posible, que si la tabla tiene muchos datos, la consulta se demore. Por tanto dependiendo de donde la utilices, seria bueno usrala filtrada.

Un saludo