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?

1 Respuesta

Respuesta
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
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
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.
¿Y? ¿Salio lo de la contraseña?
Cualquier duda pregunta
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
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
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,
Ok, no hay problema, ¿Pudiste solucionar la segunda pregunta (la del combobox)?
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,
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
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,
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
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.
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.
¿Me quieres pasar la base por zipeada por mail así lo reviso?
Si vale, con gusto... mandame tu correo y te envío la base de datos
kike

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas