Access - Perdida de valor en variable

 
Vista:

Perdida de valor en variable

Publicado por Vicente (20 intervenciones) el 29/10/2007 17:12:22
Muy buenas a tod@s.

Necesitaria que alguine me puediera echar una mano con el siguiente problema.

Tengo una base de datos la cual accedo a ella mediante un formulario de seguridad en la que los usuarios deben de introducir usuario y contraseña. Tambien tengo una variable publica declarada. Ahora bien al introducir correctamente usuario y contraseña quiero almacenar ese usuario en dicha variable para poder utilizarla en todos los demas formularios.

Hasta ahora solo he podido conseguir que me la muestre en el formulario al que llamo principal, pero despues de pasar por los demas formularios y volver de nuevo al principal, dicha variable a perdido su valor.

¿Como lo podria hacer para que no lo perdiese?

Muchas gracias a tod@s
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

RE:Perdida de valor en variable

Publicado por fran (6 intervenciones) el 29/10/2007 21:32:00
debes declarar la variable como publica :
public variable
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

RE:Perdida de valor en variable

Publicado por mi menda (1111 intervenciones) el 30/10/2007 02:25:03
Esta es otra forma.
En vez de utilizar una variable, almacena el valor en la propiedad información adicional del formulario principal.

En el botón de abrir el formulario principal

DoCmd.OpenForm "FormPrincipal", acNormal, , , , , Me.txtUsuario

En el evento al abrir del FormPrincipal

Me.Tag = Me.OpenArgs

Para referirte al valor desde cualquier sitio

Campo = Forms!FormPrincipal.Tag
Espero que te sirva

Un Saludo
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

RE:Perdida de valor en variable

Publicado por Vicente (20 intervenciones) el 30/10/2007 09:13:33
Hola mi menda. Que tal

Creando la primera sentencia efectivamente me guarda el valor pero luego al ir abriendo los sucesivos formularios que tengo, en los cuales esta el campo usuario y que quiero dejar para que vayan grabando los movimientos los distintos usuarios y luego extraer estadisticas, me sigue sin guardar el valor.

He seguido los pasos que me has descrito pero no se si he hecho algo mal.

Perdona que te pregunte otra vez pero es que tengo un nivel medio-bajo de access y creo que algo estoy haciendo mal.

Un saludo.
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

RE:Perdida de valor en variable

Publicado por Enrique (1299 intervenciones) el 31/10/2007 12:32:03
El problema creo que se te presenta porque en algún momento cierras el formulario principal, ya que si éste permaneciera abierto siempre (como sería lo correcto), la forma que te indicó mi menda en su primer mensaje te serviría perfectamente. Esto es lo que intuyo por tu respuesta a la opción propuesta por mi menda, por eso te he recomendado lo de la variable Global, sino me hubiera quedado callado.

Un saludo y ya nos dirás algo.

Enrique
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

RE:Perdida de valor en variable

Publicado por Enrique (1299 intervenciones) el 30/10/2007 18:03:23
Hola Vicente:
Para esto puedes utilizar una variable Global. Estas variables solo se pueden definir en un Módulo y una vez que le asignes un valor, este permanece disponible desde cualquier parte de la base de datos. Por ejemplo para una variable de tipo String (puede ser cualquier otro tipo: Integer, Double, Variant, etc), crea un Módulo nuevo y dentro pones esto:

Option CompareDatabase
Global NombreVariable As String
Option Explicit

Ahora en el formulario de Inicio le asignas valor a esa variable, por ejemplo Al Cargar:

Private Sub Form_Load()
NombreVariable = Me.Usuario
End Sub

A partir de este momento y mientras la base de datos esté abierta, tienes disponible el valor que le hayas dado a dicha Variable, salvo que expresamente anules su valor con: NombreVariable = ""

Saludos
Enrique
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

RE:Perdida de valor en variable

Publicado por mi menda (1111 intervenciones) el 31/10/2007 01:45:42
Hola Vicente:
Bueno...lo que te puse es "un truquillo"..... Cuando hagas una pregunta debes de poner el código que no te funciona.
El fenomeno de Enrique ya te ha dicho como se hace con una variable en un módulo, que seguro que es lo mejor.
Pero volviendo a tu primera pregunta,¿Como llamas a la variable Pública desde otro formulario?. Para llamar a una variable pública de un módulo de formulario,desde otra parte seria:
Campo = Forms!NombreFormulario.NombreVariable

Un Saludo
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

RE:Perdida de valor en variable

Publicado por Vicente (20 intervenciones) el 31/10/2007 15:59:07
Hola Enrique:

Perdona que te moleste. He seguido los pasos que me dices pero me surge el siguiente problema. Veras resulta que la variable que quiero tener disponible es la que obtengo del primer formulario que es un formulario de seguridad en el que cad usuario debe de introducir su DNI y una contraseña, y la variable seria el codigo de usuario que va a entrar a la aplicacion. Lo necesitaria para extraer estadisticas por usuario, ver quien da de alta movimiento, facturas, etc.
Pues siguiendo tus pasos me salta la duda que me dices en la que tengo que tener abierta la base de datos. La bbdd es la de un formulario a otro, pero no consigo que en ya en el siguiente formulario (el principal) y en un cuadro de texto me incluya el valor de dicha variable.
Algo estoy haciendo mal seguro, pero no se que es. Me podrias echar una mano.

Muchisimas gracias por todo y perdon por la pesadez
Saludos
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

RE:Perdida de valor en variable

Publicado por Enrique (1299 intervenciones) el 31/10/2007 18:14:33
Hola Vicente:
Para empezar hay que tener en cuenta que todas las variables pierden su valor al cerrar la base de datos, incluso las Globales (esto es lógico), pero mientras la mdb esté abierta o no se produzca una interrupción por un error, no hay problema.

Ahora vamos a ver si lo he entendido, el formulario que tu llamas de Seguridad, supongo que será el formulario de Inicio con 2 cuadros de texto, uno para el DNI y el otro para la Contraseña (lo usual es Nombre de Usuario y Contraseña, pero es sigual). Cuando el usuario teclea su DNI y su Contraseña, se cierra este formulario de Seguridad y se abre el Principal ¿ correcto ?. Pués bien, ANTES de que se cierre el Formulario de Seguridad le tienes que dar valor a la variable Global para que se quede disponible en cualquier parte de la base.
Creas el Módulo como te dije y lo grabas, luego en el Procedimiento de Evento "Después de actualizar" del cuadro de texto Codigo (supongo que Codigo será la contraseña o el DNI, debería ser el DNI porque no es razonable mostrar después la Contraseña que cualquiera podría ver), pones:

Private Sub txtCodigo_AfterUpdate()
NombreVariable = Me.Codigo
End Sub

Ya se puede cerrar este formulario de seguridad. Ahora en el Formulario Principal pones un cuadro de texto ya sea "Independiente" o con Origen del Control y en su Evento Al Cargar pones:

Private Sub Form_Load()
Me.txtCodigoUsuario = NombreVariable
End Sub

Y este cuadro de texto (yo lo llamo txtCodigoUsuario) debe tomar el valor que antes de cerrarse el Form de Seguridad le dimos a la variable, aunque me parece a mi que hay algo más que no nos has contado, ya nos dirás.

Saludos
Enrique
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

RE:Perdida de valor en variable

Publicado por Enrique (1299 intervenciones) el 31/10/2007 19:12:25
Creo que habrás visto que aquí he cometido un error, si el cuadro de texto se llama Codigo en el Evento no se puede poner Private Sub txtCodigo........ (sobra "txt" ), lo correcto es:

Private Sub Codigo_AfterUpdate()
NombreVariable = Me.Codigo
End Sub

Es evidente pero por si acaso te lo comunico.
Enrique
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

RE:Perdida de valor en variable

Publicado por Vicente (20 intervenciones) el 05/11/2007 09:06:17
Hola Enrique que tal?

Lo primero que quiero decirte es que perdon por el retraso en la respuesta, ya te puedes imaginar puente, fin de semana y demas. Espero que tu tambien hayas descansado.

Con respecto a la explicacion que me has puesto decirte que muchisimas gracias por todo, por fin me ha slido lo que yo queria. Era justamente esa explicacion y el desarrollo del codigo que me dijiste para que dicha variable acabe por visualizarse en todos los formularios que abro sin cambiar de usuario.

Muchas gracias por todo y perdon por lo pesado que he podido ser.

Un saludo
Vicente
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