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

Cálculos con horas previamente encadenadas en campo texto

Estas en el tema de Cálculos con horas previamente encadenadas en campo texto en el foro de Bases de Datos General en Foros del Web. Access 2003. Buenas. Quizás esté pretendiendo hacer algo demasiado complicado para mis escasos conocimientos. Gracias a la ayuda de este foro (gracias Taribo) he conseguido, ...
  #1 (permalink)  
Antiguo 24/06/2008, 13:22
 
Fecha de Ingreso: junio-2008
Mensajes: 20
Antigüedad: 16 años, 7 meses
Puntos: 0
Cálculos con horas previamente encadenadas en campo texto

Access 2003.

Buenas. Quizás esté pretendiendo hacer algo demasiado complicado para mis escasos conocimientos.
Gracias a la ayuda de este foro (gracias Taribo) he conseguido, mediante macros y consultas de creación de tablas, crear dos tablas con las siguientes estructuras:

Tabla Marcajes_temporal:
Campos: DNI (texto), Fecha (fecha/hora) y Marcaje (texto)
donde tengo varios registros relativos a varios "marcaje" de la misma "fecha" y del mismo "dni".

Tabla Marcajes_persona:
Campos: DNI (texto), Fecha (fecha/hora) y MarcajesX (texto)
aquí he conseguido ver para cada DNI y Fecha (única) el campo MarcajesX, que contiene como texto los diferentes marcajes de la primera tabla, conseguido con una función y separados por un guión (ej. de MarcajesX: 07:45:12 - 15:05:12)

Pero ahora no sé operar con ello. Y necesito calcular la diferencia entre los marcajes de cada día, restar 15:05:12 menos 07:45:12 según el ejemplo. Y poner el resultado en otro campo calculado a la derecha (Tiempo).
Mi problema se hace mayor porque puede que en una única fecha haya más de dos marcajes, valiendo MarcajesX por ejemplo:
07:45:12 - 15:05:12 - 17:30:00 - 22:00:00

aquí el valor del campo calculado Tiempo debiera ser: (15:05:12 menos 07:45:12) MÁS (22:00:00 menos 17:30:00)

Y ya para rizar el rizo.... también es posible que algún día, alguna fecha, tenga un sólo marcaje, bien porque se olvidaran de efectuar el segundo (la salida), bien porque se entra en un día y se sale al siguiente (fechas diferentes); o incluso que hubiera tres marcajes, o cinco... (impares, por los motivos anteriores).

Sé que estoy pidiendo demasiado y quizás la explicación sea insuficiente.
Lo dicho... pretendo hacer algo demasiado complejo para mis escasos conocimientos. No obstante, muchas gracias de antemano. Un saludo. Carlos.-
  #2 (permalink)  
Antiguo 25/06/2008, 09:52
Avatar de the_web_saint  
Fecha de Ingreso: mayo-2008
Ubicación: localhost/tierra/america/panama
Mensajes: 1.229
Antigüedad: 16 años, 8 meses
Puntos: 43
Respuesta: Cálculos con horas previamente encadenadas en campo texto

Bueno segun entendi, te dare mi opinion.

Primero lo primero, debes saber cuantos marcajes tienes por ejemplo el dia de hoy, osea haces un select de los marcajes limitando por el rango de dias que deseas calcularlo,
luego en un ciclo con estos valores, vas haciendo la diferencia de los marcajes, claro que para este calculo debes tener un dato que tenga tanto el dia como la hora,
al principio, antes de entrar al ciclo debes tener una variable en la cual sumaras el resultado de la diferencia de cada marcaje, osea tipo acumulador.
espero hablerme explicado! y haber entendido tu pregunta...

Saludos
__________________
..::The Saint::..
El pesimista se queja del viento; el optimista espera que cambie; el realista ajusta las velas.
  #3 (permalink)  
Antiguo 25/06/2008, 15:08
 
Fecha de Ingreso: junio-2008
Mensajes: 20
Antigüedad: 16 años, 7 meses
Puntos: 0
Respuesta: Cálculos con horas previamente encadenadas en campo texto

Gracias por tu ayuda.

He conseguido solucionarlo de la siguiente manera:
- crear tantos campos en una consulta como marcajes hubiera en el día.
- después he creado campos calculados de Tiempo_n, donde resto marcaje2 menos marcaje1, marcaje4 menos marcaje3, etc...
- después ya opero con esos campos calculados para sumar los tiempos y conseguir los informes.

Mi problema sigue en cuanto hay un número impar de marcajes en algún día, y cuando el marcaje1 pertenece a fecha1 pero marcaje2 es del fecha1 + 1.

Seguiré en ello.

Muchas gracias.
Saludos.
  #4 (permalink)  
Antiguo 26/06/2008, 02:50
Avatar de 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
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 07:29.