Access - Navegador guay entre formularios (usando variables temporales)

 
Vista:
sin imagen de perfil

Navegador guay entre formularios (usando variables temporales)

Publicado por Alejandro (9 intervenciones) el 06/04/2016 10:38:12
Hola a toda la comunidad. Quiero preguntar algo sencillito haber si es posible hacerlo.

Quiero diseñar en mi Access (que ya tiene varios formularios), el tipico navegador que te encontrarias en muchas aplicaciones donde a parte de un boton que te cierra el formulario (lo más facil del mundo), me gustaria poner un boton con la tipica flechita hacia atras que te lleve al FORMULARIO ANTERIOR (el que abrió el nuevo en el que estas). Digamos que en aspectos técnicos, quiero que el formulario que se abra "recuerde" qué otro formulario le abrió.

Despues de indagar por internet se me ocurrio una idea que estoy viendo si es posible.

Tengo un formulario "INICIO" que hace de interfaz inicial. Lo estoy probando para cuando abra otro formulario que se llama "INVESTIGADORES" (algo asi como la clasica tabla clientes). La idea es esta:

En el boton del formulario INICIO que te lleva a INVESTIGADORES, implemento este código:

Private Sub boton_AbrirInvestigadores_Click()
DoCmd.OpenForm "INVESTIGADORES", acNormal, , , , , "INICIO"
End Sub

*Como veis lo que hago es que abra INVESTIGADORES, pasandole en OpenArgs su propio nombre de formulario para que INVESTIGADORES lo recuerde, luego en el evento "Al cargar" de INVESTIGADORES, implemento esto:

Public Sub Form_Load()
Dim argumento As String
argumento = Me.OpenArgs
End Sub

*Hasta aqui todo bien y el formulario recoge el nombre del formulario que lo abrió en la variable "argumento", la cual es la que quiero usar en el siguiente codigo, en el evento "Al hacer click", del boton con la flechita hacia atras que tiene INVESTIGADORES, para que si clickeas te regrese al formulario QUE LE ABRIÓ:

Private Sub boton_IrAnterior_Click()
DoCmd.Close acForm, "INVESTIGADORES"
DoCmd.OpenForm argumento, acNormal
End Sub


Obviamente se que esto no funciona, y se que es porque inmediatamente despues del segundo código, despues de dar valor a "argumento", al terminar el procedimiento, argumento ya pierde el valor, no consigo almacenarlo en la memoria. Por eso se me ocurrió que la clave pueda ser usar variables temporales, cosa que hasta ahora no habia hecho y no se muy bien como hacerlo. Mi idea era crear un módulo llamado VarTemporales y poner:

Public/Global varform As String

*y en el código donde INVESTIGADORES recoge el OpenArgs (Al cargarlo) poner:

Private Sub Form_Load()
Dim argumento As String
argumento = Me.OpenArgs
VarTemporales!varform = argumento
End Sub

La idea es almacenar en una variable temporal siempre el último OpenArg recogido e implantar dicha recogida del OpenArg y su asignacion al módulo en todos los formularios que vayan a abrirse por medio de otro.

Se que no lo estoy haciendo bien sintácticamente pero tampoco se si esto puede hacerse. Me parece interesante saber de que forma puedo guardar variables globales en un módulo para darlas valor todo el tiempo que quiera y cuando quiera, y luego poder llamarlas desde eventos en formularios.

Espero que hayais entendido bien lo que planteo, si teneis dudas preguntarme y lo detallo más. Gracias de antemano.
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
sin imagen de perfil

Navegador guay entre formularios (usando variables temporales)

Publicado por Enrique Heliodoro (1664 intervenciones) el 07/04/2016 09:09:39
Felicidades por el descubrimiento (es muy viejo el método y muy útil si se desea bloquear la apertura independente de un formulario), pero ....

La solución es la mas sencilla del mundo:
ANTES de cerrar el formulario (para evitar que se pierdan las variables creadas en el) ejecuta la orden de apertura del formulario deseado (o el que dispongas de la variable OpenArgs), tras ello cierra el formulario actual (consiste en cambiar de orden esas dos líneas).

Otro método es utilizar una VARIABLE PUBLICA (se declararía en cualquier modulo independiente disponible) y se asignaría a ella ese valor a trasvasar, si se dispone de una version de Access que disponga de las 'variables temporales' se pueden utilizar en su lugar (la única ventaja, es que en caso de un fallo en el código, estas ultimas no pierden el valor).
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