Access - Formulario coordina con tabla

 
Vista:
sin imagen de perfil
Val: 35
Ha mantenido su posición en Access (en relación al último mes)
Gráfica de Access

Formulario coordina con tabla

Publicado por Arsenio (18 intervenciones) el 07/02/2018 20:55:02
Gracias por leer el post. He buscado una solución pero no he sabido encontrarla.

Tengo un formulario para ver y editar una tabla. He clocado un botón para buscar con el método recordset.Seek
funciona bien, el índice existe. Cuando ejecuto el código el puntero de la tabla me indica que ha encontrado el registro buscado en el campo adecuado, (NoMatch=False), pero los datos en el formulario no hay forma de referescarlos.

He usado todos los métodos:

recordset.Requery
recordset.Refresh

Y alguno más que no recuerdo.

El dato que entrega rst.Fields("Entidad").Value se corresponde con el dato de búsqueda, sin embargo los datos que muestra el formulario no se mueven.

Tengo la impresión que no es un problema de refresco.

Código:

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
Private Sub buscarEntidad_Click()
    Dim dbs As DAO.Database
    Dim rst As DAO.Recordset
 
    Dim entBuscar As String
    Dim miPuntero As Variant
 
    Set dbs = CurrentDb
    Set rst = dbs.OpenRecordset("Entidades", dbOpenTable)
 
    miPuntero = rst.Bookmark
    rst.Index = "Entidad"
 
    entBuscar = InputBox("Indica la endidad a buscar: ", "BÚSQUEDA POR ENTIDADES")
    If Nz(entBuscar, "") = "" Then
        Exit Sub
    End If
 
    rst.Seek "=", entBuscar
 
    If rst.NoMatch Then
        rst.Bookmark = miPuntero
        MsgBox "No se ha encontrado la entidad"
    Else
        Me.Requery
        MsgBox "Lo ha encontrado! " & " / " & rst.Fields("Entidad").Value
    End If
 
    rst.Close
    dbs.Close
End Sub

Muchas gracias por cualquier tipo de ayuda
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

Formulario coordina con tabla

Publicado por Ramón (13 intervenciones) el 07/02/2018 23:06:02
Hola.
No te actualiza el formulario porque lo que estás haciendo es trabajar con un recordset que no está relacionado con el formulario. Sin haberlo probado (ahora no dispongo de una máquina para hacerlo), yo haría una de estas dos cosas:
1.- Utiliza la propiedad RecordsetClone del formulario para realizar la búsqueda.
2.- Iguala el valor de Bookmark de la propiedad RecordsetClone al valor de Bookmark de tu recordset (yo sustituiría el Me.Requery por Me.RecordsetClone.Bookmark = rst.Bookmark).
Si funciona así, bien, si no mañana intentaré hacer la prueba para ver si valen las ideas que te he expuesto.
Un saludo y perdón por la falta de concreción.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
sin imagen de perfil
Val: 35
Ha mantenido su posición en Access (en relación al último mes)
Gráfica de Access

Formulario coordina con tabla

Publicado por Arsenio (18 intervenciones) el 08/02/2018 08:22:54
Muchas gracias Ramón, probaré el método.
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

Formulario coordina con tabla

Publicado por Ramón (13 intervenciones) el 08/02/2018 09:13:05
Pues no pruebes porque no funciona con ninguna de las dos opciones :(

Con RecordsetClone no se puede indicar el índice que hay que utilizar y por tanto tampoco funciona el método Seek. Supongo que el recordset que genera es de tipo Dynaset y no de tipo Table y por eso no funciona.

Tampoco es posible igualar los marcadores de ambos recordsets porque aunque el origen es el mismo, los debe considerar distintos. Supongo que igualar Bookmark sólo funciona en copias de un mismo objeto.

Lo siento. Seguiré dándole vueltas a ver si consigo encontrar alguna solución.

Por cierto, ¿es imprescindible usar Seek?
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
sin imagen de perfil
Val: 35
Ha mantenido su posición en Access (en relación al último mes)
Gráfica de Access

Formulario coordina con tabla

Publicado por Arsenio (18 intervenciones) el 08/02/2018 14:18:58
Ocurre lo mismo con Recordset.FindFirst el puntero de la tabla va bien y el formulario a su bola, ni se inmuta.

He revisado todo de nuevo y he probado en los dos formularios vinculados a la misma tabla y también he eliminado uno de los formularios y sigue igual, Es muy raro:

He añadido un control de búsqueda con el asistente para "Botones de comando" "Navegación de registros => Buscar Registro" y funciona correctamente, es decir: busca en el puntero de la tabla y refresca automáticamente los datos del formulario. No sé cómo ver los comandos del macro porque quizá el sistema de refresco sea interesante.

Quería colocar un control de búsquedas "LIKE" a mi gusto, pero estoy por tirar la toalla y dejar el botón creado por el asistente.

Muchas gracias por todo Ramón.
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

Formulario coordina con tabla

Publicado por Ramón (13 intervenciones) el 08/02/2018 14:52:46
Te propongo esta solución:
1
2
3
4
5
6
7
8
9
10
11
12
13
entBuscar = InputBox("Indica el pedido a buscar: ", "BÚSQUEDA POR NÚMERO DE PEDIDO")
If Nz(entBuscar, "") = "" Then
    Exit Sub
End If
 
Me.RecordsetClone.FindFirst "Entidad = '" & entBuscar & "'"
 
If Me.RecordsetClone.NoMatch Then
    MsgBox "No se ha encontrado la entidad"
Else
    Me.Bookmark = Me.RecordsetClone.Bookmark
    MsgBox "Lo ha encontrado! " & " / " & Me.RecordsetClone.Fields("Entidad").Value
End If

Falta controlar que el puntero vuelva al registro de partida en caso de que la búsqueda no sea correcta pero eso ya lo tenías en tu código y no supondría mayor problema.
Espero que así se solucione el problema.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
sin imagen de perfil
Val: 35
Ha mantenido su posición en Access (en relación al último mes)
Gráfica de Access

Formulario coordina con tabla

Publicado por Arsenio (18 intervenciones) el 08/02/2018 15:44:04
Era una buena idea Ramón pero no funciona. Ocurre lo mismo. El problema es de refresco de los datos del formutario. El puntero del recordset (tabla "Entidades") se sitúa correctamente en el registro buscado, peroo el formulario ni se inmuta.

Bueno... tendré que aprender un poco más sobre cómo funciona y se coordina el formulario en función de los saltos del puntero en la tabla vinculada.

Lo curioso es que el macro que genera el asistente para botones hace el trabajo completo.

Muchas gracias por todo Ramón, un saludo muy cordial, Arsenio (EA2HW)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
Private Sub Comando31_Click()
    Dim dbs As Database
    Dim rst As Recordset
 
    Dim entBuscar As String
 
    Set dbs = CurrentDb
    Set rst = dbs.OpenRecordset("Entidades")
    rst.Index = "Entidad"
 
    entBuscar = InputBox("Indica la entidad a buscar", "BÚSQUEDA POR ENTIDAD")
 
    If Nz(entBuscar, "") = "" Then
        Exit Sub
    End If
 
    Me.RecordsetClone.FindFirst "Entidad = '" & entBuscar & "'"
 
    If Me.RecordsetClone.NoMatch Then
        MsgBox "No lo ha encontrado"
    Else
        MsgBox "Lo ha encontrado! " & " / " & Me.RecordsetClone.Fields("Entidad").Value
    End If
End Sub
Encontrado
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
sin imagen de perfil
Val: 35
Ha mantenido su posición en Access (en relación al último mes)
Gráfica de Access

Formulario coordina con tabla

Publicado por Arsenio (18 intervenciones) el 11/02/2018 17:49:23
¡Resuelto!

La búsqueda la realizaba directamente en la tabla cuando debía hacerlo en en el formulario. Este código funciona (Falta ponerlo guapo):

1
2
3
4
5
6
7
8
Private Sub buscarFecha_Click()
    Dim rst As DAO.Recordset
    Dim miFecha As String
 
    Set rst = Me.Recordset
    miFecha = InputBox("Indica la fecha de búsqueda")
    rst.FindFirst "Fecha >= # " & Format(miFecha, "mm/dd/yyyy") & " #"
End Sub
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