** NORMAS DEL FORO **
Inicio del foro Inicio del foro > Access y VBA > Access y VBA
  Mensajes nuevos Mensajes nuevos RSS - Error al actualizar formulario
  Preguntas frecuentes Preguntas frecuentes  Buscar en el foro   Eventos   Registro Registro  Iniciar sesion Iniciar sesion

Error al actualizar formulario

 Responder Responder
Autor
Mensaje
NABLAHE Ver desplegable
Nuevo
Nuevo


Unido: 02/Mayo/2019
Localización: ESPAÑA
Estado: Sin conexión
Puntos: 5
Opciones de entrada Opciones de entrada   Gracias (0) Gracias(0)   Cita NABLAHE Cita  ResponderRespuesta Enlace directo a este mensaje Tema: Error al actualizar formulario
    Enviado: 02/Mayo/2019 a las 14:09
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:



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:


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
Arriba
Marciana Ver desplegable
Asiduo
Asiduo
Avatar

Unido: 20/Septiembre/2004
Localización: Argentina
Estado: Sin conexión
Puntos: 253
Opciones de entrada Opciones de entrada   Gracias (0) Gracias(0)   Cita Marciana Cita  ResponderRespuesta Enlace directo a este mensaje Enviado: 02/Mayo/2019 a las 23:07
Si entiendo tu planteo te sugiero lo siguiente:
1) En la funcion ELIMINAR, luego de 
DoCmd.RunCommand acCmdDeleteRecord
yo agregaría me.refresh
para que la actualización se traslade a la tabla correspondiente.
2) En el segundo caso, la función COMPEN después de 
Set rs_m = db_m.OpenRecordset(strSQL_m, dbOpenForwardOnly) 
yo agregaría rs_m.MoveLast y luego rs_MoveFirst para que el sistema cargue toda la consulta. 
Cordialmente, Marciana
Arriba
NABLAHE Ver desplegable
Nuevo
Nuevo


Unido: 02/Mayo/2019
Localización: ESPAÑA
Estado: Sin conexión
Puntos: 5
Opciones de entrada Opciones de entrada   Gracias (0) Gracias(0)   Cita NABLAHE Cita  ResponderRespuesta Enlace directo a este mensaje Enviado: 03/Mayo/2019 a las 01:49
Publicado originalmente por Marciana Marciana escribió:

Si entiendo tu planteo te sugiero lo siguiente:
1) En la funcion ELIMINAR, luego de 
DoCmd.RunCommand acCmdDeleteRecord
yo agregaría me.refresh
para que la actualización se traslade a la tabla correspondiente.
2) En el segundo caso, la función COMPEN después de 
Set rs_m = db_m.OpenRecordset(strSQL_m, dbOpenForwardOnly) 
yo agregaría rs_m.MoveLast y luego rs_MoveFirst para que el sistema cargue toda la consulta. 

 
Gracias por la respuesta pero ya probe todo eso y no me funcionó. La verdad es que me tiene loco la tontería esta.... No sé porqué leche salta el bucle....
Arriba
NABLAHE Ver desplegable
Nuevo
Nuevo


Unido: 02/Mayo/2019
Localización: ESPAÑA
Estado: Sin conexión
Puntos: 5
Opciones de entrada Opciones de entrada   Gracias (0) Gracias(0)   Cita NABLAHE Cita  ResponderRespuesta Enlace directo a este mensaje Enviado: 06/Mayo/2019 a las 22:39
Ya lo solucioné gracias a ayuda de otro usuario. Cambiando el código por la función Dsum. 


Arriba
 Responder Responder
  Compartir tema   

Ir al foro Permisos de foro Ver desplegable