¿Cómo guardar un campo calculado?

Tengo un formulario en el que registro las horas laboradas por cada usuario y la cantidad de horas se calcula en el evento AfterUpdate() con la siguiente formula txt_horas_trabajadas = [txt_hora_Fin] - [txt_hora_Ini], el problema que tengo es a la hora de guardar los datos, con el siguiente codigo no me guarda la horas que se muestran en el campo calculado:

Dim db As Database
Dim rs As Recordset
Set db = CurrentDb
Set rs = db.OpenRecordset("tbl_Registro_Extras")
    Dim msg As String, estilo, title As String
    estilo = vbCritical + vbOKOnly
    title = "Error en la inserción por falta de datos"
    Msg = "No se han podido crear los registros solicitados por no existir ninguna entrada en el campo "
    If IsNull(Me.txt_dia_laborado) Then
        msg = msg & "Día Laborado"
        MsgBox msg, estilo, title
        Me.txt_dia_laborado.SetFocus
        Exit Sub
    End If
    If IsNull(Me.txt_hora_Ini) Then
        msg = msg & "Falta Hora de Inicio."
        MsgBox msg, estilo, title
        Me.txt_hora_Ini.SetFocus
        Exit Sub
    End If
        If IsNull(Me.txt_hora_Fin) Then
        msg = msg & "Fecha Hora de Finalización."
        MsgBox msg, estilo, title
        Me.txt_hora_Fin.SetFocus
        Exit Sub
    End If
    If IsNull(Me.txt_horas_trabajadas) Then
        msg = msg & "Horas Trabajadas."
        MsgBox msg, estilo, title
        Me.txt_horas_trabajadas.SetFocus
        Exit Sub
    End If
rs.AddNew
rs!dia_laborado = "" & txt_dia_laborado
rs!hora_inicio = "" & txt_hora_Ini
rs!hora_fin = "" & txt_hora_Fin
rs!horas_laboradas = "" & txt_horas_trabajadas
rs.Update
rs.Close
Set rs = Nothing
db.Close
 MsgBox "Los datos se ingresaron satisfactoriamente", vbInformation, "Datos"
txt_dia_laborado = Null
txt_hora_Ini = Null
txt_hora_Fin = Null
txt_horas_trabajadas = Null

Leí en una página que consultaban lo mismo que la solución era poner en origen del control el nombre del campo de la tabla donde se debe guardar, si funciona, PERO al hacer esto me borra la cantidad de horas trabajadas del primer registro, esto sucede cuando se cierra y se abre el formulario

Respuesta
1

Ahora que ya te han respondido, si el cuadro de texto Horas_labor tiene origen del control no te lo borrará nunca, ya que te lo guarda en el campo que le indiques.

Por otro lado, el inconveniente de trabajar tal como lo estás haciendo es que si quisieras averiguar las horas trabajadas en un intervalo de tiempo, si son inferiores a 24:00 te saldría bien pero si las superan te va a dar un valor que no concuerda con la suma de horas.

1 respuesta más de otro experto

Respuesta
1

rs!dia_laborado = "" & txt_dia_laborado
rs!hora_inicio = "" & txt_hora_Ini
rs!hora_fin = "" & txt_hora_Fin
rs!horas_laboradas = "" & txt_horas_trabajadas

Si tu campos que tienes en tu tabla son de fecha-hora  estas insertando mal.

Yo lo haria de la siguiente manera

Cuurrentdb.Execute "INSERT INTO tablaLaQueSea (fecha_dia), VALUES (#" & laFecha & "#)",dbfailonerror

Cuando insertes fecha 

lleva ## siempre y cuando el campo de la tabla sea tipo fecha/hora

https://www.youtube.com/watch?v=zmSLysmFpF0 

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas