Access - Desplazamiento por registrtos del formulario

   
Vista:

Desplazamiento por registrtos del formulario

Publicado por José (53 intervenciones) el 25/12/2015 23:24:08
Hola,
tengo el siguiente código:

1
2
3
4
5
6
7
8
9
Dim F As Form, Fs As Form
Set F = Forms![COMPLET]![ACTIVEGP].Form
Set Fs = F![ACTIVEG].Form
F.Filter = "[C] = 99 AND " & "[D] = '" & F![FDISCIPLINE] & "'"
F.FilterOn = True
Fs.Filter = ""
Fs.FilterOn = False
'DoCmd.GoToRecord acDataForm, "ACTIVEGP", acLast
'DoCmd.GoToRecord acDataForm, F.Name, acLast

normalmente con DoCmd.GoToRecord acDataForm, "ACTIVEGP", acLast me puedo desplazar por los registros el formulario.
Ahora tengo tres formularios maestro/detalle: Complet - Activegp que depende de Complet y Activeg que depende de Activegp.
Mi pregunta es ¿como me puedo desplazar por el formulario con la instruccion
DoCmd.GoToRecord acDataForm, "ACTIVEGP", acLast pues me dice que el formulario ACTIVEGP no está abierto.
Tampoco puedo utilizar 'DoCmd.GoToRecord acDataForm, F.Name, acLast pues me devuelve el nombre ACTIVEGP y dice que tampoco está abierto.
saludos,
José
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

Desplazamiento por registrtos del formulario

Publicado por Enrique Heliodoro (1663 intervenciones) el 26/12/2015 11:18:13
Si se esta trabajando con un conjunto de formulario y sus correspondientes subformularios, el único 'formulario' abierto es el principal, el resto son simples objetos dependientes que no figuraran en esa categoría (formulario) ni en la de 'subformulario' por el simple hecho de que los 'sub-formularios' no existen como tal categoría.

Para referenciar a un formulario en funciones de sub-formulario, se le ha de referenciar como objeto del formulario que lo contiene y si ese (a su vez) esta también 'contenido' como objeto de otro formulario, ha de respetar la misma regla.

Llamemos al formulario principal 'Abuelo', al contenido en el 'Padre' y al que contiene el padre 'Hijo'
Son tres formularios que podrán opcionalmente ser abiertos por su cuenta (y figuraran como tales en la colección de formularios cuando se abran) o los podrá abrir un formulario como objetos suyos (que creo que es el actual caso).

La referencia desde el abuelo al padre:
Forms.Abuelo.Padre.Form..... [campo o propiedad del padre]
Abreviado, podría ser asi:
Me.Padre.Form .......

Aclaración de terminología (Forms.Abuelo.Padre.Form):
Forms ==> referencia a la colección (conjunto) de formularios abiertos (en este caso solo figurara el abuelo que se 'abrió como FORMULARIO')
Abuelo ==> el nombre del formulario principal
Padre ==> el nombre del objeto del principal (como si fuera un cuadro de texto o afín)
Form ==> el indicador de que 'el objeto PADRE' es un formulario y como tal ha de ser tratado
.... ==> representaría a una propiedad u objeto del formulario (en funciones de subformulario) al que llamamos 'Padre'

Aclaración de terminología (Me.Padre.Form):
Me ==> indicador del objeto actual y activo (equivale en esta caso a 'Forms.Abuelo')
... el resto es idéntico.

En base a lo anterior el referenciar desde el 'abuelo' al nieto (de nombre 'hijo') no debería ser un problema si se ha entendido el esquema planteado antes.

Para utilizar ese tipo de desplazamiento (que no deja de ser mas que un 'desplazamiento fisico') aconsejaría que se le enviase el foco (para convertirlo en el 'objeto activo') y facilitar su manipulación, en la mayor parte de las ocasiones, lo que o suele fallar (al enviar el foco a un objeto que 'esta en otro nivel') acostumbra a ser el enviar el foco al nivel y tras ello al objeto (similar a enviar a alguien al piso decimo y ya en esa planta a la habitación u oficina de nuestro interés).

Hay metodología mas eficaz, pero requiere el manejar (o al menos conocer) el funcionamiento de los recordset (lo que evita ese tipo de desplazamiento que simula el hacerlo de forma manual).
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

Desplazamiento por registrtos del formulario

Publicado por José (53 intervenciones) el 26/12/2015 17:33:15
Hola Enrique,
gracias por la respuesta.
Lo que me indicas me ha quitado algunas dudas y me ha servido.
El problema lo he resulto de la siguiente manera:

1
2
3
4
5
6
7
8
9
Dim F As Form, Rs As DAO.Recordset
Set F = Forms![COMPLET]![ACTIVEGP].Form
F.Filter = "[IDCOMPLET] = " & Val(Me![IDCOMPLET]) & " And [D] = " & Chr(34) & Me![FDISCIPLINE] & Chr(34)
F.FilterOn = True
Set Rs = F.RecordsetClone
If Not Rs.EOF Then
 Rs.MoveLast
 F.Bookmark = Rs.Bookmark
End If

saludos
José
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

Desplazamiento por registrtos del formulario

Publicado por Enrique Heliodoro (1663 intervenciones) el 26/12/2015 22:27:08
Creo que lo has complicado mas de lo necesario, pero como desconozco el entorno ......

Si funciona correctamente y cumple su objetivo nada se puede objetar.
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