Access - Actualizar formulario

   
Vista:

Actualizar formulario

Publicado por Solmar (5 intervenciones) el 20/04/2015 23:11:02
Buenas tardes:
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 al cargar el formulario de edición. 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 el formulario de edición. Para esto he creado una variable pública en un módulo de esta forma:

1
2
3
4
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 el formulario de edición, mientras que la otra variable, CODIGOPACIENTEEDITAR es la que uso para cargar el formulario inicial nuevamente.

En el formulario inicial 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)

1
2
3
4
5
6
7
8
9
10
11
12
13
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 el formulario inicial, 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 el formulario inicial

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
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.


¿Cómo podría actualizar los datos en el formulario inicial?
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
Imágen de perfil de Norberto

Actualizar formulario

Publicado por Norberto (432 intervenciones) el 21/04/2015 14:18:47
Hola.

Se me ocurre que no se cierre el formulario original cuando se habra el de edición y que cuando vuelvas se actualice el primero. ¿Cómo? La manera más fácil es que el segundo formulario se abra en modo diálogo usando DoCmd.OpenForm ...., acDialog. De esta manera el código del formulario principal se detiene hasta que cierres el de edición. El código quedaría más o menos asÍ:

Private Sub cmdEditar_Click()
DoCmd.OpenForm "Formulario de edición", , , , , acDialog
'El código se detiene hasta que se cierre el formulario de edición
Me.Refresh
End Sub

No creo que sea necesario el Me.Refresh. Pruébalo de las dos formas. Si no se actualiza, puedes usar Me.Requery, pero en este caso se te irá al primer registro. Para volver al actual podrías guardar el registro actual (Me.CurrentRecord) en una varible Long antes del Requery y volver a él usando DoCmd , , acGoTo, variable. Pero, repito, no creo que sea necesario.

Un saludo,

Norberto.
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

Actualizar formulario

Publicado por Solmar (5 intervenciones) el 21/04/2015 16:17:34
Muchas gracias por tu respuesta. Lamentablemente no ha resultado. Esto es lo que probé:

formulario FICHAS
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
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


formulario FICHAS EDITAR
1
2
3
4
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:

1
2
DoCmd.OpenForm stDocName, , , , , acDialog
Me.Refresh

1
2
3
4
DoCmd.OpenForm stDocName, , , , , acDialog
Me.Refresh
DoCmd.GoToRecord , , acGoTo, codigopacienteeditar
codigopacienteeditar = ""

1
2
3
4
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)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
'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

1
2
3
4
5
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.

Espero que puedan darme una orientación o ayuda al respecto. Estoy consciente de que puedo estar utilizando una codificación muy básica, pero estoy en proceso de aprender (siempre).

Muchas gracias por el apoyo.
Un saludo desde Lima, Perú
Bendiciones
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