Usuario
Actualizar formulario "padre"

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