none
Actualizar formulario "padre" RRS feed

  • Pregunta

  • Buenos días:
    Se trata de lo siguiente. Tengo un formulario que tiene un botón que carga otro formulario que es para la edición de datos. Lo que necesito hacer es que una vez modificados los datos en el formulario de edición, al cerrarlo, los datos en el formulario inicial se refresquen y actualicen. Así lo estoy haciendo:

    Cierro el formulario inicial (FICHAS) al cargar el formulario de edición (FICHAS EDICION). Una vez terminada la edición del formulario, guardo en una variable el ID del registro y cargo el formulario inicial apuntando al registro editado y cierro FICHAS EDICION. Para esto he creado una variable pública en un módulo de esta forma:

    Option Compare Database
    
    Public codigopaciente As String
    Public codigopacienteeditar As String


    La variable CODIGOPACIENTE es la que almacena el ID del registro al momento de cargar FICHAS EDICION, mientras que la otra variable, CODIGOPACIENTEEDITAR es la que uso para cargar FICHAS nuevamente.

    En FICHAS tengo este código para realizar la acción necesaria (si hay dato en la variable CODIGOPACIENTEEDITAR entonces se va a ese registro, caso contrario va al inicio)

    Private Sub Form_Load() '***** AL CARGAR EL FORMULARIO
        If codigopacienteeditar = "" Then
            Me.Requery
            DoCmd.GoToRecord , , acFirst
        Else
            Me.Requery
            DoCmd.RunCommand acCmdRefresh
            DoCmd.GoToRecord , , acGoTo, codigopacienteeditar
            codigopacienteeditar = ""
        End If
    
    .... continúa otro código que no tiene nada que ver con el caso
    End Sub

    He probado primero sin el acCmdRefresh pero en ambos casos no pasa nada.

    He notado que la actualización de datos es automática cuando un campo esta vinculado a un campo de la base de datos. Pero cuando es, por ejemplo, un campo de texto cuyo contenido depende de criterios que se encuentran en diferentes campos de la base de datos, no pasa nada (lo cual es lógico).

    Lo curioso es que si me pongo a navegar en FICHAS, sea que retroceda o avance un registro, si regreso luego al registro editado, se muestran los cambios ingresados. 

    Inclusive se me ocurrió probar esto en FICHAS

    If codigopacienteeditar = "" Then
            Me.Requery
            DoCmd.GoToRecord , , acFirst
        Else
            Me.Requery
            DoCmd.GoToRecord , , acGoTo, codigopacienteeditar
            codigopacienteeditar = ""
            
            If Not Me.CurrentRecord = 1 Then
                DoCmd.GoToRecord , , acPrevious
                DoCmd.RunCommand acCmdRefresh
                DoCmd.GoToRecord , , acNext
            Else
                DoCmd.GoToRecord , , acNext
                DoCmd.RunCommand acCmdRefresh
                DoCmd.GoToRecord , , acPrevious
            End If
        End If

    pretendiendo "emular" un retroceso o avance en los registros y regresar al original luego, pero nada.

    También he probado esta otra forma en FICHAS

    Private Sub Comando17_Click()   '***** BOTÓN EDITAR
    
    If CurrentProject.AllForms("Fichas Editar").IsLoaded Then
        DoCmd.Close acForm, "Fichas Editar"
    End If
    
    On Error GoTo Err_Comando96_Click
    
        Dim stDocName As String
        Dim stLinkCriteria As String
        
        codigopaciente = CurrentRecord
        nombrepaciente = Texto2 & ", " & Texto4
        fotografiapaciente = Texto70.Value
        
        stDocName = "Fichas Editar"
        DoCmd.OpenForm stDocName, , , , , acDialog
        Me.Requery
        DoCmd.GoToRecord , , acGoTo, codigopacienteeditar
        Me.Refresh
        codigopacienteeditar = ""
    
    Exit_Comando96_Click:
        Exit Sub
    
    Err_Comando96_Click:
        MsgBox Err.Description
        Resume Exit_Comando96_Click
    End Sub

    y esto en el formulario FICHAS EDITAR

    Private Sub Comando207_Click()  '***** BOTÓN ACTUALIZAR
        codigopacienteeditar = CurrentRecord   
        DoCmd.Close acForm, "Fichas Editar"
    End Sub


    Ahora bien, en el formulario FICHAS probé varias combinaciones:

    DoCmd.OpenForm stDocName, , , , , acDialog
    Me.Refresh
    
    
    DoCmd.OpenForm stDocName, , , , , acDialog
    Me.Refresh
    DoCmd.GoToRecord , , acGoTo, codigopacienteeditar
    codigopacienteeditar = ""
    
    
    DoCmd.OpenForm stDocName, , , , , acDialog
    Me.Requery
    DoCmd.GoToRecord , , acGoTo, codigopacienteeditar
    codigopacienteeditar = ""

    Básicamente son 2 las "secciones" en las que tengo problema. Una es con una imagen y la otra con datos procesados. Por ejemplo (se trata de una aplicación para un consultorio dental) hay una sección en la que se solicita información sobre los hábitos del paciente referente a si es bebedor, fumador y/o consumidor de drogas. Para este caso, cree grupos con campos del tipo Verificación, de 5 opciones cada grupo (fumador, bebedor y drogas) en las que van desde "consumidor" hasta "nunca". Esta configurado para que sólo exista una opción posible, no multiples, y el dato seleccionado se guarda en la base de datos. 

    Luego, para mostrar los resultados seleccionados de manera más "amigable", uso el siguiente código (código que lo incluyo en los botones de navegación para que siempre este actualizado)

    'hábitos sociales
        varHabitosSociales = ""
        
        If [fumador] = 1 Then
            If [genero] = 0 Then
                varHabitosSociales = varHabitosSociales & "fumador empedernido     "
            Else
                varHabitosSociales = varHabitosSociales & "fumadora empedernida     "
            End If
        ElseIf [fumador] = 2 Then
            varHabitosSociales = varHabitosSociales & "fuma regularmente     "
        ElseIf [fumador] = 3 Then
            If [genero] = 0 Then
                varHabitosSociales = varHabitosSociales & "fumador social     "
            Else
                varHabitosSociales = varHabitosSociales & "fumadora social     "
            End If
        ElseIf [fumador] = 4 Then
            varHabitosSociales = varHabitosSociales & "fuma de vez en cuando     "
        Else
            varHabitosSociales = varHabitosSociales & "no fuma     "
        End If
        
        If [bebedor] = 1 Then
            If [genero] = 0 Then
                varHabitosSociales = varHabitosSociales & "bebedor empedernido     "
            Else
                varHabitosSociales = varHabitosSociales & "bebedora empedernida     "
            End If
        ElseIf [bebedor] = 2 Then
            varHabitosSociales = varHabitosSociales & "bebe regularmente     "
        ElseIf [bebedor] = 3 Then
            If [genero] = 0 Then
                varHabitosSociales = varHabitosSociales & "bebedor social     "
            Else
                varHabitosSociales = varHabitosSociales & "bebedora social     "
            End If
        ElseIf [bebedor] = 4 Then
            varHabitosSociales = varHabitosSociales & "bebe de vez en cuando     "
        Else
            varHabitosSociales = varHabitosSociales & "no bebe     "
        End If
        
        If [drogas] = 1 Then
            If [genero] = 0 Then
                varHabitosSociales = varHabitosSociales & "adicto a las drogas"
            Else
                varHabitosSociales = varHabitosSociales & "adicta a las drogas"
            End If
        ElseIf [drogas] = 2 Then
            varHabitosSociales = varHabitosSociales & "drogas para consumo personal"
        ElseIf [drogas] = 3 Then
            varHabitosSociales = varHabitosSociales & "consume drogas recreacionalmente"
        ElseIf [drogas] = 4 Then
            varHabitosSociales = varHabitosSociales & "consume drogas ocacionalmente"
        Else
            varHabitosSociales = varHabitosSociales & "no consume drogas"
        End If
        
        Texto126.Value = varHabitosSociales

    Igual proceder utilizo con secciones en las que muestra información del estado civil y zona geográfica donde reside el paciente (distrito, provincia, departamento)

    En el caso de la imagen asociada a la ficha, esta corresponde a una foto del paciente y el código que utilizo es el siguiente

    Private Sub Form_Current()      '***** MUESTRA LA IMAGEN ASOCIADA AL REGISTRO
    If IsNull([foto]) = False Then
        FotoPaciente.Picture = Application.CurrentProject.Path + "\pacientes\" + foto
    End If
    End Sub

    donde FotoPaciente es el nombre asignado en la sección OTROS de la imagen. Y funciona bien, pero tampoco se refresca si cambio la foto del paciente.

    ¿Alguien me puede dar alguna sugerencia sobre como lograr hacer lo que busco?

    Agradezco muchísimo la paciencia y tiempo dispensada a mi consulta. Busqué ser bien detallado para facilitar la ayuda que pudieran brindarme.

    Un saludo cordial y sincero desde Lima, Perú

    Bendiciones



    • Editado Rómulo martes, 21 de abril de 2015 14:57
    martes, 21 de abril de 2015 14:33