Crear formulario para validar usuario y contraseña
Quiero agregar un formulario a mi base de datos que valide usuario y contraseña. La idea es que dependiendo del usuario, se abrirán ciertos formularios. Ya cree la tabla con nombre de usuario, contraseña y tipo de usuario.
¿Qué debo colocar para realizar esta validación?
¿Qué debo colocar para realizar esta validación?
1 respuesta
Respuesta de kbza_85
1
1
Primero tienes que crear un modulo y generar la variable usuario para poder llamarla desde los demás formularios:
Option Compare Database
Option Explicit
Public usuario As String
Luego tenes que poner un boton en el formulario con el siguiente evento asignado
Private Sub Comando4_Click()
Dim algo As String
Dim db As Database
Dim SQLline As String
Dim Result As Object
If Texto0 = " " Or Texto2 = " " Then
Algo = MsgBox("Por favor, complete todos los campos", 16, "Omisión")
Else
SQLline = "SELECT * FROM Usuarios WHERE Usuario = '" & Me.Texto0 & "' and contraseña = '" & Me.Texto2 & "';"
Set db = CurrentDb()
Set Result = db.OpenRecordset(SQLline)
If Result.EOF And Result.BOF Then
algo = MsgBox("El nombre de usuario o contraseña son incorrectos", 16, "Discrepancia")
Else
usuario = Texto0
DoCmd. OpenForm "0-Primero"
DoCmd. OpenForm "Contraseña"
DoCmd. Close
End If
Result. Close
Db. Close
Set Result = Nothing
Set db = Nothing
End If
End Sub
Luego en cada formulario tienes que crear una evento al cargar que bloquee o habilite los botenes dependiendo del usuario. Por ejemplo
Select Case usuario
Case "polvos", "inyectables", "orales", "empaque"
Comando1.Enabled = True
Comando2.Enabled = True
Comando3.Enabled = False
Comando4.Enabled = False
Case "produccion"
Comando1.Enabled = True
Comando2.Enabled = True
Comando3.Enabled = False
Comando4.Enabled = True
Case "aseguramiento"
Comando1.Enabled = False
Comando2.Enabled = False
Comando3.Enabled = False
Comando4.Enabled = True
End Select
End Sub
Option Compare Database
Option Explicit
Public usuario As String
Luego tenes que poner un boton en el formulario con el siguiente evento asignado
Private Sub Comando4_Click()
Dim algo As String
Dim db As Database
Dim SQLline As String
Dim Result As Object
If Texto0 = " " Or Texto2 = " " Then
Algo = MsgBox("Por favor, complete todos los campos", 16, "Omisión")
Else
SQLline = "SELECT * FROM Usuarios WHERE Usuario = '" & Me.Texto0 & "' and contraseña = '" & Me.Texto2 & "';"
Set db = CurrentDb()
Set Result = db.OpenRecordset(SQLline)
If Result.EOF And Result.BOF Then
algo = MsgBox("El nombre de usuario o contraseña son incorrectos", 16, "Discrepancia")
Else
usuario = Texto0
DoCmd. OpenForm "0-Primero"
DoCmd. OpenForm "Contraseña"
DoCmd. Close
End If
Result. Close
Db. Close
Set Result = Nothing
Set db = Nothing
End If
End Sub
Luego en cada formulario tienes que crear una evento al cargar que bloquee o habilite los botenes dependiendo del usuario. Por ejemplo
Select Case usuario
Case "polvos", "inyectables", "orales", "empaque"
Comando1.Enabled = True
Comando2.Enabled = True
Comando3.Enabled = False
Comando4.Enabled = False
Case "produccion"
Comando1.Enabled = True
Comando2.Enabled = True
Comando3.Enabled = False
Comando4.Enabled = True
Case "aseguramiento"
Comando1.Enabled = False
Comando2.Enabled = False
Comando3.Enabled = False
Comando4.Enabled = True
End Select
End Sub
Muchas gracias amigo... haré lo que me indicas y te confirmo como me fue. Aprovecho para comentarte algo extraño que me pasa en un formulario.
En un formulario tengo un Combo box con varias opciones, resulta que algunas de las opciones cuando las selecciono me cambia la opción solo visualmente, por que si me almacena la opción seleccionada en el registro.
Por ejemplo:
Las opciones son:
Piña
Manzana
Pera
Melón
Fresa
Cuando selecciono piña, muestra piña seleccionada, y almacena piña. Pero voy a seleccionar melón, me muestra piña y almacena melón. Y eso me pasa como con 4 opciones de la lista de 18.
He creado varias veces ya el combo box desde cero y siempre es lo mismo
Pero con otros combo box que tengo no me sucede (claro, son listas más cortas)
Saludos, y espero tu ayuda ;)
kike
En un formulario tengo un Combo box con varias opciones, resulta que algunas de las opciones cuando las selecciono me cambia la opción solo visualmente, por que si me almacena la opción seleccionada en el registro.
Por ejemplo:
Las opciones son:
Piña
Manzana
Pera
Melón
Fresa
Cuando selecciono piña, muestra piña seleccionada, y almacena piña. Pero voy a seleccionar melón, me muestra piña y almacena melón. Y eso me pasa como con 4 opciones de la lista de 18.
He creado varias veces ya el combo box desde cero y siempre es lo mismo
Pero con otros combo box que tengo no me sucede (claro, son listas más cortas)
Saludos, y espero tu ayuda ;)
kike
Lo único que se me ocurre es como tienes armado el combobox, cuando lo creas tienes que poner que los valores del formulario cambien según el cambia.
Si esto falla podes hacer algo mucho más indio e igualar el campo que quieres que cambie en un evento algo así
[Campo]=Me!Lista56
Espero ser útil, la verdad que no se muy bien que puede estar pasando.
Si esto falla podes hacer algo mucho más indio e igualar el campo que quieres que cambie en un evento algo así
[Campo]=Me!Lista56
Espero ser útil, la verdad que no se muy bien que puede estar pasando.
Hola amigo, disculpa el retraso... he estado full con otras cosas pero ya estoy de regreso con las pruebas.
Estoy probando lo del usuario y me esta funcionando, pero quisiera que después de validar los datos de usuario este formulario se cerrara. Ahora se queda la ventana de usuario y contraseña abierta.
Esperando tu colaboración...
Saludos,
Mi código es este:
If Text0 = " " Or Text2 = " " Then
Algo = MsgBox("Por favor, complete todos los campos", 16, "Omisión")
Else
SQLline = "SELECT * FROM Usuarios WHERE Usuario = '" & Me.Text0 & "' and contraseña = '" & Me.Text2 & "';"
Set db = CurrentDb()
Set Result = db.OpenRecordset(SQLline)
If Result.EOF And Result.BOF Then
algo = MsgBox("El nombre de usuario o contraseña son incorrectos", 16, "Discrepancia")
Else
stDocName = "INICIO"
DoCmd.OpenForm stDocName, , , stLinkCriteria
Me.FilterOn = True
End If
Result.Close
db.Close
Set Result = Nothing
Set db = Nothing
End If
Estoy probando lo del usuario y me esta funcionando, pero quisiera que después de validar los datos de usuario este formulario se cerrara. Ahora se queda la ventana de usuario y contraseña abierta.
Esperando tu colaboración...
Saludos,
Mi código es este:
If Text0 = " " Or Text2 = " " Then
Algo = MsgBox("Por favor, complete todos los campos", 16, "Omisión")
Else
SQLline = "SELECT * FROM Usuarios WHERE Usuario = '" & Me.Text0 & "' and contraseña = '" & Me.Text2 & "';"
Set db = CurrentDb()
Set Result = db.OpenRecordset(SQLline)
If Result.EOF And Result.BOF Then
algo = MsgBox("El nombre de usuario o contraseña son incorrectos", 16, "Discrepancia")
Else
stDocName = "INICIO"
DoCmd.OpenForm stDocName, , , stLinkCriteria
Me.FilterOn = True
End If
Result.Close
db.Close
Set Result = Nothing
Set db = Nothing
End If
Tienes que agregar lo que puse en negrita
If Result.EOF And Result.BOF Then
Algo = MsgBox("El nombre de usuario o contraseña son incorrectos", 16, "Discrepancia")
Else
stDocName = "INICIO"
DoCmd.OpenForm stDocName, , , stLinkCriteria
DoCmd.OpenForm "Contraseña"
DoCmd.Close
Me.FilterOn = True
End If
Result.Close
db.Close
Set Result = Nothing
Set db = Nothing
End If
If Result.EOF And Result.BOF Then
Algo = MsgBox("El nombre de usuario o contraseña son incorrectos", 16, "Discrepancia")
Else
stDocName = "INICIO"
DoCmd.OpenForm stDocName, , , stLinkCriteria
DoCmd.OpenForm "Contraseña"
DoCmd.Close
Me.FilterOn = True
End If
Result.Close
db.Close
Set Result = Nothing
Set db = Nothing
End If
Perfecto, ya lo probé y funciona. Ahora voy a probar la parte del código para los formularios y validar el acceso de los usuarios.
Muchas gracias... te confirmo todo ahora más tarde.
Saludos,
Muchas gracias... te confirmo todo ahora más tarde.
Saludos,
Si pude solucionar lo del combo box, hice de nuevo el combo pero cambie las variables donde almacenaba el valor.
Con respecto a lo de los formularios donde debo validar el usuario:
Veo qué me pones en el ejemplo un "Case" y me imagino que "polvos", "¿producción" y "aseguramiento" son usuarios o tipos de usuario?
Porque tengo mi tabla de usuarios que tiene: usuario, contraseña y tipo. Me gustaría filtrar el acceso por el tipo de usuario. Tengo solo dos tipos de usuarios: Admin, user
ebravo 1234 admin
Recepción 4321 user
¿Cómo haría en este caso?
Saludos,
Con respecto a lo de los formularios donde debo validar el usuario:
Veo qué me pones en el ejemplo un "Case" y me imagino que "polvos", "¿producción" y "aseguramiento" son usuarios o tipos de usuario?
Porque tengo mi tabla de usuarios que tiene: usuario, contraseña y tipo. Me gustaría filtrar el acceso por el tipo de usuario. Tengo solo dos tipos de usuarios: Admin, user
ebravo 1234 admin
Recepción 4321 user
¿Cómo haría en este caso?
Saludos,
Perdona, el ejemplo que te puse tenia los usuarios que utilice yo en el programita que hice.
Para lograr lo que me estas pidiendo en el formulario en el que cargan usuario y contraseña en vez de guarda rel nombre de usuario como variable global, guardas el tipo de usuario y en los formularios que abrís utilizas los case llamando a dicha variable
Para lograr lo que me estas pidiendo en el formulario en el que cargan usuario y contraseña en vez de guarda rel nombre de usuario como variable global, guardas el tipo de usuario y en los formularios que abrís utilizas los case llamando a dicha variable
Hola amigo... esta ultima parte no me sale. No se como guardar temporalmente el valor de tipo de usuario y usarlo en el "Case".
Mi tabla Usuarios tiene los siguientes campos: usuario, contraseña y tipo
Esperando tu ayuda...
Saludos,
Mi tabla Usuarios tiene los siguientes campos: usuario, contraseña y tipo
Esperando tu ayuda...
Saludos,
Primero tienes que crear un modulo y pegarle los siguientes datos
Option Compare Database
Option Explicit
Public tipodeusuario As String
Luego en el botón de aceptar del formulario en el que completas usuario y contraseña tienes que poner el siguiente código, te resalto en negrita la parte en la que asignas el valor a la variable
Private Sub Comando4_Click()
Dim algo As String
Dim db As Database
Dim SQLline As String
Dim Result As Object
If Texto0 = " " Or Texto2 = " " Then
Algo = MsgBox("Por favor, complete todos los campos", 16, "Omisión")
Else
SQLline = "SELECT * FROM Usuarios WHERE Usuario = '" & Me.Texto0 & "' and contraseña = '" & Me.Texto2 & "';"
Set db = CurrentDb()
Set Result = db.OpenRecordset(SQLline)
If Result.EOF And Result.BOF Then
algo = MsgBox("El nombre de usuario o contraseña son incorrectos", 16, "Discrepancia")
Else
tipodeusuario = result.tipo
DoCmd. OpenForm "0-Primero"
DoCmd. OpenForm "Contraseña"
DoCmd. Close
End If
Result. Close
Db. Close
Set Result = Nothing
Set db = Nothing
End If
End Sub
Después en todos los demás formularios en los que nocesites bloquear algún botón o que no vean algo llamas a la variable tipodeusuario en el evento al abrir
Case "usuario"
Texto1.Enabled = False '(lo ve pero en otro color, no puede pararse sobe el control)
Texto2.Visible= False '(no lo ve)
Texto3.Locked= True ' (lo ve y puede pararse, pero no modificarlo)
Case "administrador"
Texto1.Enabled =True
Texto2.Visible= True
Texto3.Locked= False
Option Compare Database
Option Explicit
Public tipodeusuario As String
Luego en el botón de aceptar del formulario en el que completas usuario y contraseña tienes que poner el siguiente código, te resalto en negrita la parte en la que asignas el valor a la variable
Private Sub Comando4_Click()
Dim algo As String
Dim db As Database
Dim SQLline As String
Dim Result As Object
If Texto0 = " " Or Texto2 = " " Then
Algo = MsgBox("Por favor, complete todos los campos", 16, "Omisión")
Else
SQLline = "SELECT * FROM Usuarios WHERE Usuario = '" & Me.Texto0 & "' and contraseña = '" & Me.Texto2 & "';"
Set db = CurrentDb()
Set Result = db.OpenRecordset(SQLline)
If Result.EOF And Result.BOF Then
algo = MsgBox("El nombre de usuario o contraseña son incorrectos", 16, "Discrepancia")
Else
tipodeusuario = result.tipo
DoCmd. OpenForm "0-Primero"
DoCmd. OpenForm "Contraseña"
DoCmd. Close
End If
Result. Close
Db. Close
Set Result = Nothing
Set db = Nothing
End If
End Sub
Después en todos los demás formularios en los que nocesites bloquear algún botón o que no vean algo llamas a la variable tipodeusuario en el evento al abrir
Case "usuario"
Texto1.Enabled = False '(lo ve pero en otro color, no puede pararse sobe el control)
Texto2.Visible= False '(no lo ve)
Texto3.Locked= True ' (lo ve y puede pararse, pero no modificarlo)
Case "administrador"
Texto1.Enabled =True
Texto2.Visible= True
Texto3.Locked= False
Disculpa, al final me falto la parte en la que llamo a la variable, queda una cosa así:
Select case tipodeusuario
Case "usuario"
Texto1.Enabled = False '(lo ve pero en otro color, no puede pararse sobe el control)
Texto2.Visible= False '(no lo ve)
Texto3.Locked= True ' (lo ve y puede pararse, pero no modificarlo)
Case "administrador"
Texto1.Enabled =True
Texto2.Visible= True
Texto3.Locked= False
End select
Ahora si, Cualquier duda lo seguimos viendo.
Select case tipodeusuario
Case "usuario"
Texto1.Enabled = False '(lo ve pero en otro color, no puede pararse sobe el control)
Texto2.Visible= False '(no lo ve)
Texto3.Locked= True ' (lo ve y puede pararse, pero no modificarlo)
Case "administrador"
Texto1.Enabled =True
Texto2.Visible= True
Texto3.Locked= False
End select
Ahora si, Cualquier duda lo seguimos viendo.
Hola amigo, de nuevo yo por acá con unos problemitas... ya realicé los cambios que me dijiste pero no me sigue validando el tipo de usuario. Haciendo unas pruebas me di cuenta que después de dar al botón aceptar del formulario "SESION" (donde solicito usuario y contraseña), la variable tipodeusuario tiene el valor correcto. Pero al cargar el formulario de inicio ya la variable no tiene nada y por eso no me esta validando. ¿Qué puede estar pasando? tipodeusuario es una variable global, y debería mantenerse el valor.
Espero tus comentarios,
saludos amigo.
Espero tus comentarios,
saludos amigo.
- Compartir respuesta
- Anónimo
ahora mismo