Inicio de Sesión con usuario y contraseña en Access

He encontrado un Tutorial que explica paso a paso para lo de iniciar sesión mediante usuario y contraseña. El problema es que aun siguiendo los paso al momento de intentar iniciar sesión con el elemento clic al botón no me hace nada.

Lo lógico seria que una vez iniciada la sesión me envié al formulario principal que en este caso seria (Inicio Menú).

En el código que he sido lo pasos no tiene ninguna explicación de a donde me tiene que dirigir.

este es el enlace del tutorial. http://bit.ly/2UfRaCw 

Pero para no ir más lejos aquí copio el código.

Omitiré los pasos 1 y 2 que son de crear el formulario y el otro de una Secuencia SQL

Paso 3 Code

Option Compare Database
Option Explicit
'---------------------------------------------------------------------
' Procedure : Get_Contraseña
' Author    : Witigo (Angel Campos Muñoz)
' Date      : 22/09/2014
' Purpose   : Obtiene la contraseña del usuario pasado como argumento.
'---------------------------------------------------------------------
'
Public Function Get_Contraseña(intUsuario As Integer) As String
Dim dbs As DAO.Database
Dim rst As DAO.Recordset
Dim strSQL As String
    strSQL = "SELECT dbo_Usuarios.Contraseña " & _
                "FROM dbo_Usuarios " & _
                "WHERE ID_Usuario = " & intUsuario & ";"
    Set dbs = CurrentDb()
    Set rst = dbs.OpenRecordset(strSQL, dbOpenDynaset)
Dim strContraseña As String
    If rst.RecordCount <> 0 Then
        strContraseña = rst!Contraseña
    End If
    ' Devolvemos la contraseña
    Get_Contraseña = strContraseña
    ' Cerramos el recordset
    rst.Close
    ' Borramos los objetos
    Set rst = Nothing
    Set dbs = Nothing
End Function

Paso 4 Code

'---------------------------------------------------------------------
' Procedure : Comprueba_Usuario
' Author    : Witigo (Angel Campos Muñoz)
' Date      : 22/09/2014
' Purpose   : Controla si se ha seleccionado un usuario del combobox
'             cbo_Usuario
'---------------------------------------------------------------------
'
Private Function Comprueba_Usuario() As Boolean
    If IsNull(Me.cbo_Usuario.Value) = True Then
        ' Realizamos mensaje sonoro
        Beep
        ' Mostramos mensaje en la etiqueta
        Call MensajeEtiqueta("Debe seleccionar un usuario.")
        ' Centramos el foco en el textbox
        Me.cbo_Usuario.SetFocus
        ' Devolvemos FALSE por que no hay ningún usuario
        ' seleccinado en el combobox...
        Comprueba_Usuario = False
    Else
        ' Devolvemos TRUE por que SI hay un usuario
        ' seleccionado en el combobox...
        Comprueba_Usuario = True
    End If
End Function

los otros pasos no me permite copiar mas texto asi que los otros pasos se pueden ver en el enlace arriba, 

1 respuesta

Respuesta
1

Yo te aconsejaría que crearas una tabla Registro con IdRegistro(autonumérico), Usuario, Fecha, Hora.

Es de suponer que tienes una tabla Usuarios con, entre otros, Usuario y Contraseña.

Crearía un formulario(si quieres Modal y Emergente, va a gusto del consumidor), más o menos como el de la imagen

Verás que no pongo combinado. Nadie tiene porque ver el nombre de otros usuarios. También le añado un cuadro de texto oculto, llamado Contador.

En el evento Al activar registro, ya que anulo los botones de navegación, le pongo

Contador=0

Y en el evento Al hacer clic del botón Verificar le pongo

Private Sub Comando15_Click()
If Nz(DCount("usuario", "usuarios", "contraseña = forms!usuario!contraseña and usuario=forms!usuario!usuario")) >= 1 Then
    DoCmd.SetWarnings False
    DoCmd.RunSQL "insert into registro(usuario,fecha,hora)values(Usuario,date(),time())"
    DoCmd.OpenForm "Inicio Menu"
Else
    Contador = Contador + 1
    MsgBox "No eres " & Me.[Usuario], vbOKOnly, "Aviso, llevas " & Me.Contador & " intento(s)"
    DoCmd.CancelEvent
        If Contador = 3 Then
        MsgBox "Como he comprobado que no eres quien dices me cierro", vbOKOnly + vbCritical, "Otra vez será"
        DoCmd.Quit
        End If
End If
End Sub

Me explico. El usuario escribe su nombre y la contraseña. Si acierta, primero guarda en la tabla Registro quien entró, el día y la hora. Esto te sirve para saber quien anduvo "trasteando" en la base por si tienes que decirle algo. También se podría poner que guardara quien lo intentó y no se sabía o bien el nombre o bien la contraseña, por si quieres "liquidarlo". o como dice Toni el Gordo de los Simpson, "resetearlo".

Además, como ha acertado le abre el formulario Inicio Menu.

Si no acertara, le da tres oportunidades, hay que ser generoso con los torpes. Si a la tercera no acierta, se despide y se cierra la base.

Ya tenia el formulario de Login ya diseñado.

La diferencia es que el botón de verificar aquí es iniciar sesión.

En vez de tener una tabla (Usuarios) ya la tenia la tabla como empleados aquí. Y solo hice la de Registro

El código hiciste con la tabla Usuarios yo simplemente suplante y le puse Empleados que es el nombre de la tabla que tenia.

Private Sub Comando15_Click()
If Nz(DCount("empleados", "empleados", "contraseña = forms!usuario!contraseña and usuario=forms!usuario!usuario")) >= 1 Then
    DoCmd.SetWarnings False
    DoCmd.RunSQL "insert into registro(usuario,fecha,hora)values(Usuario,date(),time())"
    DoCmd.OpenForm "Inicio Menu"
Else
    Contador = Contador + 1
    MsgBox "No eres " & Me.[Usuario], vbOKOnly, "Aviso, llevas " & Me.Contador & " intento(s)"
    DoCmd.CancelEvent
        If Contador = 3 Then
        MsgBox "Como he comprobado que no eres quien dices me cierro", vbOKOnly + vbCritical, "Otra vez será"
        DoCmd.Quit
        End If
End If
End Sub

y en el formulario del Login al evento (Al activar registro) le pongo Contador=0 me da esto.

Por partes, el cuadro de texto que se ve en el diseño del informe que pone Indep(independiente) es el que yo llamo Contador.

Por otro lado, lo que interesaría ver es el diseño de la tabla Empleados, porque me da la impresión de que el campo donde aparece el nombre del empleado se llama precisamente así Empleado y no empleados como pones en la instrucción. De todas formas, si quieres, repito, si quieres, mándame un mensaje(sólo el mensaje) a [email protected] y te mando un ejemplo. Si lo haces, en el asunto del mensaje pon tu alias Llister Durán, ya que si no sé quien me escribe ni los abro.

Dentro de la tabla empleado el nombre esta normal Usuario y contraseña.

Esa es la tabla empleados y esa es la distribución, así que dice usuario.

Si tengo la tabla Usuarios

La tengo así, para que no se repita el nombre de usuario ni la contraseña.

En este caso no le he puesto máscara de entrada de asteriscos para que se vean las claves

Por otro lado tengo la tabla Registro

Entonces, cuando se abre el formulario y pongo el nombre y su clave

Al pulsar verificar, como se cumple la condición se abre el formulario que le digo, en este caso el formulario se llama Julián, y en una etiqueta te pone el nombre del usuario que entró, como cortesía.

Como puedes ver le doy la bienvenida al usuario que entró. Detalles que tiene uno. Y por otro lado, en la tabla Registro

Así, si me ha hecho algún desaguisado puedo reprenderle.

El código es exactamente el que te puse antes.

Por el contrario, si se equivoca en el nombre o en la clave

Al pulsar Verificar

Así, hasta tres veces. Si a la tercera no acierta, sale un rayo láser de la pantalla y lo deja ciego durante tres días y lo deja calvo para siempre.

no se que estoy haciendo mal, pero hasta cambie el nombre de tabla a Usuarios y el nombre del formulario a Usuario solo para hacer un copy pega del código sin modificar nada y aun así me da un error. 

no tengo ni la menor idea que estoy haciendo mal. si he seguido tus mismos pasos. 

he subido el código a ver aquí ( http://bit.ly/2YDfP3g ) y si lo revisas dime donde cometí el error solo me falta esto para terminar. 

te lo voy agradecer con el alma. 

Te mando la explicación por correo

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas