Refrescar datos en pantalla

Estoy haciendo una agenda donde en una de sus formas muestra el listado de los clientes y a su extremo el numero de visitas hechas a ese cliente (para mostrarlo utilizo Text Box y cambio la propiedad de la forma a ContinueForm para ver el listado), esta información es mensual por lo tanto se tiene que refrescar cada vez que el usuario selecciones el mes a consultar que se encuentra en un Combo Box lo he intentado hacer colocando un Me. Refresh en la en el combo Box pero no me funciona la información no cambia, se puede hacer de esta manera o tengo forzosamente cerrar y abrir la forma para que la información se refresque. Esta forma tiene asignado en su propiedad RowSource un query que hace que aparezca el listado de clientes este query tiene como filtro el mes año y el nombre del ejecutivo.

1 respuesta

Respuesta
Lo único que tienes que hacer es, crear un botón (con el asistente presionado) y seguir el procedimiento que indica para actualizar los datos de un formulario. Veo que tu formulario tiene subformularios, entonces dicho botón debe estar en el formulario y no así dentro de un subform. De esta manera se actulizarán los datos de Form, y subform.
No funciona, ya que no refresca los datos del Query del RowSource de la forma, Solo funciona cuando cierro y vuelvo a abrir la forma pero no quiero que funcione de esa forma.
Lo siento mucho, lo único que se me ocurre es crear un una macro que cierre y abra el formulario, esto meterlo en un botón, pero la desventaja de esto es que abre el formulario en el primer registro, pero para esto tengo un consejo...
... Abrir un formulario en el mismo registro que mostraba cuando se cerró la última vez
No existe una opción por defecto, pero se puede añadir un pequeño código para que se guarde el último registro visualizado y Access vuelva a él al ser abierto el mismo formulario.
Los pasos a seguir son:
1º) Crear una tabla auxiliar (que aquí vamos a llamar Acceso) para almacenar el último registro visualizado en el formulario. Contendrá dos campos, uno (que llamaremos CampoClave para guardar el nombre del campo clave principal de la tabla asociada al formulario y otro para guardar el valor de dicha clave:
Campos
tipo
CampoClave Texto (Clave principal)
Valor Texto
El campo CampoClave se ha descrito como de tipo texto pero puede ser también de tipo numérico o autonumérico. Ello dependerá del tipo de campo que sea el campo clave principal de la tabla asociada al formulario. En este ejemplo suponemos que ese campo es de tipo texto y que su nombre es ClaveFormul. En cada formulario deberemos tomar nota del nombre de ese campo y de su tipo.
2º) Añadir el siguiente código al evento Al descargar del formulario deseado:
Private Sub Form_Unload(Cancel As Integer)
Dim Valor As String
If IsNull(Me![ClaveFormul]) Then
' Cambiar [ClaveFormul] por el nombre del campo clave principal
Valor = "acNewRec"
Else
Valor = Me![ClaveFormul]
' Cambiar [ClaveFormul] por el nombre del campo clave principal
End If
Set rst = db.OpenRecordset(Sql, dbOpenDynaset)
If rst.RecordCount = 0 Then
rst.AddNew
rst![CampoClave] = Me.Name
rst![Valor] = Valor
rst.Update
Else
rst.Edit
rst![Valor] = Valor
rst.Update
End If
rst.Close
End Sub
3º) Añadir el siguiente código al evento Al cargar del formulario, el cual efectúa una búsqueda en la tabla Acceso del campo clave del registro abierto, toma el valor de la clave y se coloca en él:
Private Sub Form_Load()
Set db = CurrentDb
Sql = "SELECT * FROM Acceso WHERE CampoClave = '" & Me.Name & "'"
Set rst = db.OpenRecordset(Sql, dbOpenSnapshot)
If rst.RecordCount > 0 Then
If Not IsNull(rst![Valor]) Then
If rst!Valor <> "acNewRec" Then
Set rstFrm = Me.RecordsetClone
' Si el campo clave principal ("ClaveFormul" en este ejemplo) es de tipo texto,
' la instrucción a incluir sería esta:
rstFrm.FindFirst "[ClaveFormul] = '" & rst![Valor] & "'"
' Cambiar [ClaveFormul] por el nombre del campo clave principal
' Si el campo clave principal ("ClaveFormul" en este ejemplo) es de tipo
' numérico, la instrucción sería:
' rstFrm.FindFirst "[ClaveFormul] = " & rst![Valor]
' Cambiar [ClaveFormul] por el nombre del campo clave principal
If Not rstFrm.NoMatch Then
Me.Bookmark = rstFrm.Bookmark
End If
rstFrm.Close
Else
DoCmd.GoToRecord , , acNewRec
End If
End If
End If
rst.Close
End Sub
No hay que olvidar que no sólo hay que incluir el código, sino asegurarnos que en la hoja de propiedades del formulario quedan marcados ambos eventos: Al cargar y Al descargar con [Procedimiento de evento].
4º) Estando abierto el formulario en modo de diseño, pulsar el botón Código y añadir en la sección Declaraciones el siguiente código:
Option Compare Database
Option Explicit
Dim db As Database
Dim rst As Recordset
Dim rstFrm As Recordset
Dim Sql As String
Las dos primeras líneas ya estarán escritas al acceder a esa sección. Lo mismo ocurre con las líneas primera y última del código de los eventos. Simplemente hay que procurar no repetirlas.
En el número siguiente se explica cómo ampliar este truco para que reconozca al usuario y a su PC.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas