Usuario y contraseña access

Tengo una pequeña aplicación en Access en el que al abrirla, aparece un form pidiendo usuario y contraseña (funcionando perfectamente) y al introducir correctamente los datos se cierra este form y aparece el form principal.
Lo que necesito es que me guarde el dato de usuario en memoria para que al hacer cualquier cambio o añadir cualquier registro en el nuevo formulario, me guarde ese nombre en el registro modificado (para saber así quien ha modificado ese registro)
Ya tengo un campo creado en la tabla para con el nombre usuario.
He probado con Dim as string y luego en el segundo formulario guardar ese dato con el recordset pero no hace nada.
¿Alguna ayuda?
1

1 respuesta

Respuesta
1
La variable la tienes que declarar como pública: Public NombreVariable as string
En la página:
http://angelessebas.es/
En el apartado Formularios, supuesto: Validar Usuario y Password. Sí es correcto abrir un formulario y que nos muestre el nombre del usuario
Tienes un ejemplo de como se hace.
Me cuentas.
Gracias ángeles por tu respuesta pero no consigo hacerlo. Te digo lo que tengo hecho:
Modulo llamado usuarioX con el código: Public UsuarioX As String
Formulario de usuario y contraseña con el siguiente codigo:
Private Sub ACEPTAR_Click()
Dim Base As Database
Dim pass As Recordset
Set Base = CurrentDb
Set pass = Base.OpenRecordset("select * from pass where Usuario = '" & USUARIO & "' and password = '" & CONTRASEÑA & "'")
USUARIO = UsuarioX
If pass.RecordCount = 0 Then
MsgBox "Contraseña o usuario incorrecto", vbCritical, "ACCESO DENEGADO"
Else
DoCmd.OpenForm "inicio"
DoCmd.Close acForm, "usuario"
End If
End Sub
Cuando agrego un registro en el 2º form tengo este código:
...
rs.AddNew
rs!USUARIO = UsuarioX
rs.Update
... Pero me da el siguiente error: "se esperaba una variable o procedimiento, no un modulo" y en la celda "Usuario" de la tabla lo deja en blanco.
¿Qué estoy haciendo mal?
Para dar valor a la variable UsuarioX tienes que referir el campo Usuario al recordset:
UsuarioX=pass!Usuario
Creo que va por ahí...
Me cuentas.
He cambiado mi código para hacerlo igual a tu ejemplo de la web, así que tengo lo siguiente:
Public usuariox As String
Private Sub ACEPTAR_Click()
Dim db As Database
Dim rs As Recordset
Set db = CurrentDb
Set rs = db.OpenRecordset("select * from pass where Usuario = '" & USUARIO & "' and password = '" & CONTRASEÑA & "'")
If Not rs.EOF Then
usuariox = rs!USUARIO
DoCmd.Close acForm, "usuario"
DoCmd.OpenForm "Inicio", acNormal
MsgBox "Bienvenido " & UCase(usuariox)
Else
MsgBox "Contraseña o usuario incorrecto", vbCritical, "ACCESO DENEGADO"
End If
End Sub
Si coloco el public as string en el mismo código (no en modulo) me toma bien el nombre usuario pero sigue sin copiarmelo a la tabla (que es lo que realmente quiero)
Tampoco hace nada en el botón que tengo para modificar el registro:
DoCmd.RunSQL "Update RESERVAS Set nombre='" & UCase(Form!TXTNOMBRE.Value) & "', codigo='" & UCase(Form!TXTCODIGO.Value) & "',usuario='" & UCase(usuariox) & "', Where IdReserva=" & Form!TXTIDRESERVA.Value
¿Alguna sugerencia?
Gracias
En la linea:
Set rs = db.OpenRecordset("select * from pass where Usuario = '" & USUARIO & "' and password = '" & CONTRASEÑA & "'")
Supongo que usuario y contraseña son cuadros de texto, no los llames igual que los campos, contraseña vale porque el campo se llama password pero usuario llámalo por ejemplo txtusuario y pondrías:
Set rs = db.OpenRecordset("select * from pass where Usuario = '" & Form!txtUSUARIO.value & "' and password = '" & form!CONTRASEÑA.value & "'")
La variable pública es mejor tenerla en un módulo.
Si no te sale, puedes mandarme la BD (en access 2003) y la echo un vistazo:
[email protected]
En cuanto al UPDATE:
DoCmd.RunSQL "Update RESERVAS Set nombre='" & UCase(Form!TXTNOMBRE.Value) & "', codigo='" & UCase(Form!TXTCODIGO.Value) & "',usuario='" & UCase(usuariox) & "' Where IdReserva=" & Form!TXTIDRESERVA.Value & "
Suponiendo que el IdReserva es numérico
He acabado enviándote el archivo, el cual espero impaciente que me lo puedas arreglar.
Y por favor, me gustaría que una vez solucionado, borrases ese archivo para que no se difunde sin mi permiso.
Gracias y un saludo.
El módulo en el que declaras la variable no lo llames igual que la variable.
Gracias de nuevo Angeles, por lo que veo no me has modificado el código de VBA y si lo has hecho no me funciona.
De todas formas he intentado con varias cosas, como cambiarle el nombre como bien me aconsejas, pero nada, no me guarda ese nombreUsuario en la tabla.
No se que hacer ya... te he enviado una BD para que veas como se declara y utiliza la variable pública.
Hola Angeles,
A ver, lo que necesito es lo siguiente:
Saber que código pongo exactamente en el modulo, ahora lo he llamado GLOBALES: (yo tengo puesto esto)
Option Compare Database
Public USUARIOX As String
Ahora, en el primer form (llamado USUARIO), tengo esto en la cabecera del código:
Option Compare Database
Option Explicit
Public USUARIOX As String
y en uno de los botones de ese mismo form tengo:
...
USUARIOX = Forms("USUARIO")!TXTUSUARIO.Value
MsgBox "Bienvenido " & UCase(USUARIOX)
...
Y esto me funciona porque el msgbox me responde correctamente, por ejemplo: "Bienvenido JOSE"
Ahora, se cierra el 1º form y se abre el 2º form y tengo escrito lo siguiente en la cabecera:
Option Compare Database
Public USUARIOX As String
y despues en uno de los botones (modificar registro):
Si coloco el siguiente código:
USUARIOX = Forms("USUARIO")!TXTUSUARIO.Value
Me salta un error diciendo que no encuentra el form USUARIO, y si quito esta linea de código, dejando lo siguiente:
DoCmd.RunSQL "Update RESERVAS Set usuario='" & UCase(usuariox) & "' Where IdReserva=" & Form!TXTIDRESERVA.Value & "
Me actualiza todos los campos del registro excepto este de USUARIO.
Dime algo si sigues sin ver el problema y cierro la pregunta.
Gracias
Si defines la variable pública en el módulo GLOBALES ya no la tienes que definir más, esta variable estará activa en CUALQUIER PARTE de la BD.
Si en el formulario USUARIO le das valor a la variable y es correcto (como te sale en el msgbox)
USUARIOX = Forms("USUARIO")!TXTUSUARIO.Value
(Yo lo refiero de esta forma: forms! Usuario! TxtUsuario. Value, creo que da menos problemas)
MsgBox "Bienvenido " & UCase(USUARIOX)
Este valor lo guarda hasta que le vuelvas a adjudicar otro valor distinto, entonces ¿para que vuelves a dárselo en el 2º formulario.
Haz una prueba, al cargar el 2º formulario, habiendo cerrado el 1º por en el evento al cargar de ese 2º formulario ---> Procedimiento de evento ---> MsgBox "Bienvenido " & UCase(USUARIOX), te tendrá que salir el nombre dado en el 1er formulario.
Me cuentas.
Bueno, vamos a ver:
En cuanto a lo de poner en el 2ºform el msgbox, no funciona, no me muestra el nombre de usuario, me dice "Bienvenido "
Pero si lo he conseguido de otra forma, y es quitando la linea de código del 1ºform que dice:
DoCmd.Close acForm, "usuario"
Y después, en el 2º form, en el botón de actualizar y en el de agregar registro, pongo el siguiente código:
USUARIOX = Forms("usuario")!TXTUSUARIO.Value
Lo que ocurre con esto, es que dejo el form de usuario y contraseña abierto, y me gustaría que una vez abierto el 2ºform, el 1º quedase cerrado.
Alguna idea al respecto.
PD: poco a poco voy sacándole punta a esto.
Una variable pública SIEMPRE está activada, se cierre o no el formulario.
Te he mandado otra vez la BD a ver si lo ves.
No puedo descargar las bases de datos que me has mandado, la seguridad de Hotmail no me deja abrirlos.
Por favor, reenviamelos comprimidos en Zip o Rar.
Gracias
PD: esta pregunta se me está haciendo eterna, je je
POR FINNNNNN!
No he podido ver las bd que me has enviado pero me has dado una idea en el mensaje que me has puesto.
He añadido al 2º formulario un cuadro de texto el cual lo he igualado al cuadro de texto Usuario del 1º form, una vez igualado ya puedo cerrar el 1º form, puesto que el nombre lo conservo en ese nuevo cuadro de texto.
No es exactamente lo que quería, pero me sirve perfectamente.
Gracias por tu aguante y disponibilidad.
Un saludo.

Añade tu respuesta

Haz clic para o
El autor de la pregunta ya no la sigue por lo que es posible que no reciba tu respuesta.

Más respuestas relacionadas