Access - Error al actualizar formulario

 
Vista:
sin imagen de perfil
Val: 11
Ha disminuido su posición en 12 puestos en Access (en relación al último mes)
Gráfica de Access

Error al actualizar formulario

Publicado por José María (3 intervenciones) el 02/05/2019 23:08:48
Buenas, soy nuevo por este foro y con la programación en Access y me gustaría si me pudiesen ayudar con un tema que me está volviendo loco.

El caso es que tengo un formulario que al cargar, realiza unas operaciones simples de resta y las muestra en unos campos de texto.

Los datos los coge de un subformulario se solicitudes (tabla solicitudes), y los resta a otra tabla (Permisos), mostrándolos en el formulario principal.

Todo funciona correctamente a excepción de cuando elimino una solicitud en el subformulario solicitudes, ya que al volver al formulario principal no me actualiza. Tengo que cerrar el programa o abrir otro formulario para que me actualice. Es como si quedase trabado el formulario.

Os pongo el Código de eliminación:


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
Private Sub ELIMINAR_Click()
    UserLevel = (IsNull(DLookup("[Eliminar_Registros]", "PERSONAL", "[Eliminar_Registros] = 0" _
                & " AND [Usuario] = '" & Form_PERSONAL.lbl_UsuarioActivo.Caption & "'")))
 
    If UserLevel = -1 Then
        If Not IsNull(Me.NOMBRE_APELLIDOS) = True Then
            If MsgBox("¿Está seguro de eliminar el registro seleccionado?", vbQuestion + vbYesNo, "Eliminación de datos") = vbYes Then
                'Evitar que Access muestre mensajes..
                DoCmd.SetWarnings False
                'Eliminar el registro..
                DoCmd.RunCommand acCmdDeleteRecord
                'Volver a estado actual de Access
                DoCmd.SetWarnings True
            End If
         Else
            MsgBox "No hay registro que borrar.", vbInformation, "información"
         End If
    Else
        MsgBox "No estás autorizado para realizar esta acción.", vbCritical, "Acceso Denegado."
    End If
End Sub

Y parte del código que realiza la operación al volver al formulario principal:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
Function COMPEN()
    On Error Resume Next
    Dim db_m As DAO.Database
        Dim rs_m As DAO.Recordset
        Dim strSQL_m As String
        Dim strResult_m As Double
        Set db_m = CurrentDb
        'If Not strSQL_m = "" Then
            strSQL_m = "SELECT * FROM SOLICITUD WHERE PERMISO='Compensados' and APROBACION= -1 and Id= " & Form_PERSONAL.Id.Value
            Set rs_m = db_m.OpenRecordset(strSQL_m, dbOpenForwardOnly)
            If rs_m.RecordCount <> 0 Then
                While Not rs_m.EOF
                    strResult_m = strResult_m + rs_m![HORAS]
                    rs_m.MoveNext
                Wend
            End If
            Form_PERSONAL.COMPENSADOS.Value = strResult_m
 
            strSQL_m = "SELECT CANTIDAD_HORAS FROM PERMISOS WHERE TIPO_PERMISO='Compensados' "
            Set rs_m = db_m.OpenRecordset(strSQL_m, dbOpenForwardOnly)
            'MsgBox DLookup("APROBACION", "SOLICITUD")
            Final_Compensados = Val(rs_m![CANTIDAD_HORAS]) - strResult_m
        'End If
End Function

El problema que yo he podido observar es que cuando elimino un registro, al entrar en la función COMPEN() me ejecuta el código hasta llegar al bucle que me lo salta no dándome el valor de la variable strResult_m.

Solo me ocurre cuando elimina. al modificar o agregar no tengo problema.

Nota: He probado actualizando y refrescando el subformulario después de eliminar con requery y el formulario principal también pero nada.

Necesito ayuda. Gracias
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

Error al actualizar formulario

Publicado por Anonimo (3314 intervenciones) el 03/05/2019 14:49:28
Creo que ese bucle lo podría sustituir sin problema una función de dominio (DSum).

De cualquier forma:
Una vez que se verifica un origen valido de datos para el recordset
1
If rs_m.RecordCount <> 0 Then …

lo apropiado consistiria en 'agitar el recodset' y desplazarse al primer registro:
1
rs_m. MoveLast : rs_m.MoveFirst


Tras ello recorrer el bucle, es posible que como se produjo un borrado de datos en la tabla y se ha utilizado el metodo 'DoCmd' que es asincrono, el recordset pueda devolver datos erráticos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Error al actualizar formulario

Publicado por NABLAHE (3 intervenciones) el 06/05/2019 22:35:06
Perdón por la tardanza pero estuve de finde fuera.... ya había probado lo de "agitar" el recordset sin resultado.

Cambié el código utilizando la función dSum y ahora si me actualiza bien los datos al eliminar, el único "pero" (también me lo hacía antes) es que después de eliminar en el formulario solicitudes, al volver al formulario principal, se me queda abierto desde el que elimino, tengo que cerrar el formulario principal y al dar la segunda vez ya si me cierra bien....

Gracias por tu ayuda.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar