Access restar campos de registros diferentes

Tengo 3 campos en una tabla Hinicio, Fin, Cambioturno
al meter hinicio y fin, en un registro (en u formulario), al pasar al siguiente, necesitaba que me cogiese la fin del registro anterior, y me la restase a la hinicio del registro en el que estoy situado(el siguiente), y que m rellenase automáticamente el campo cambioturno con la diferencia. (Están definidos como "hora corta")
Necesitaba saber el tiempo que se pierde entre cambios de turno

1 Respuesta

Respuesta
1
Se puede hacer de varias maneras, si tienes que restar horas entre registros, creo que la mejor manera sería la siguiente:
Te haces la consulta correspondiente donde te salgan todos los registros del empleado, mes, etc, ordenada por la hora, guardas la consulta (Consulta1)
Haces esa misma, con la misma ordenación, y le dices que te devuelva sólo el primer registro, bien en las propiedades de la consulta, o más fácil en vista SQL, escribes SELECT TOP 1 ...; guardas la consulta (Consulta2)
Haces una tercera de no coincidentes, entre la consulta1 y la consulta2, te devolverá todos los tregistro menos el primero (por eso tiene que estar ordenada por la hora o fecha), la guardas Consulta3
Y una cuarta consulta a la tercera que devuelva el primer registro, al estilo de la segunda, SELECT TOP 1 ... FROM Consulta3
Ya tienes dos consultas con las dos últimas horas/fechas para el mismo elemento, empleado, mes, etc, las metes en otra igualando empleado, mes, etc y restas las horas entre la cuarta y la segunda.
Hay otras maneras, si esta no te vale, dímelo.
Muchas gracias de antemano por la atención,
hice las 4 consultas, bien
entonces ahora, entiendo que tengo que hacer una consulta sobre la tabla, en la que tengo los dados, y en el campo cambioturno generar una expresión que me haga =[Consulta4]![Hfin] - [Consulta1]![Hinicio].. ... ¿no? ¿
Es que así me devuelve la consulta en blanco
de todas formas yo lo que desearía es que me hiciese la operación sobre el formulario de entrada de datos,
idturno hinicio fin cambioturno
1 822701 6:00 8:00 0
2 822702 8:17 10:03 17 ---> (8:17- 8:00)
3 822703 10:27 11:49 24 --> (10:27-10:03)
En el campo cambioturno no se meterían datos, lo calcularía automático a partir de hinicio y fin
lo de las consultas también me podrá valer, pero no me funciona..
AYUDA! Je je
Muchas gracias de nuevo!
Un saludo!
Según entiendo lo que quieres es arrastrar valores de un registro a otro mientras se meten los datos, eso es más fácil de solucionar:
Define cuatro variables IniActual, FinActual, IniAnterior, FinAnterior
En el evento lostfocus del textbox del control de la hora de inicio le pones
IniAnterior = IniActual
IniActual=me.hinicio
En el evento lost focus del control donde tengas la hora de fin le pones:
FinAnterior = FinActual
FinActual = me.hfin
En el evento get focus del control cambio turno le pones:
me.cambioturno = FinActual - IniAnterior
Para que en el primer registro no te lo calcule, antes de me.cambioturno = FinActual - IniAnterior, le pones
if IniAnterior+FinAnterior = 0 then exit sub
Básicamente lo que hace es utilizar cuatro variables, dos a dos, para los valores del registro anterior y del actual, y vas haciendo los cálculos con esos valores.
Esto te vale mientras estás metiendo los datos (para un formulario de entrada de datos), si lo quieres para un formulario que sólo muestre los datos tendrás que hacerlo por consultas, de manera similar a la anterior igualando por algún valor entre el registro que muestras y su cálculo.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas