Error en Acceso con Contraseña

Dudas sobre código
anrapa
Nivel 4
Mensajes: 129
Registrado: Mar Feb 23, 2016 7:10 pm

Error en Acceso con Contraseña

Mensajepor anrapa » Lun Mar 22, 2021 12:03 pm

Buenos días a todos/as,

Vereis tengo un problema con el acceso a un formulario con contraseña...

Imagen

Cuando selecciono el usuario y le introduzco la contraseña me aparece este mensaje:

Imagen

Y al darle a depurar me señala este código:

Imagen


El caso es que ha estado funcionando correctamente, hasta que hemos añadido nuevos usuarios de acceso que es cuando nos esta mostranto esto.

Añado el codigo completo por si podeis ayudarme... El código es de un manual de Neckkito, que recuerde.

Código: Seleccionar todo

Private Sub ENTRAR_Click()
    Dim vUser As Variant
    Dim vPass As Variant
vUser = Me.cboUser.Value
vPass = Me.txtpass.Value

If IsNull(vUser) Then
MsgBox "No ha seleccionado ningún USUARIO", vb, "   INFORMACIÓN   "
Me.cboUser.SetFocus
    Exit Sub
    End If

If IsNull(vPass) Then
MsgBox "INTRODUZCA CLAVE DE ACCESO", vb, "   INFORMACIÓN   "
Me.txtpass.SetFocus
    Exit Sub
    End If
Dim rst As DAO.Recordset
Set rst = CurrentDb.OpenRecordset("TPass", dbOpenSnapshot)
If rst.RecordCount = 0 Then
    MsgBox "NO EXISTEN USUARIOS", vb, "   INFORMACIÓN   "
    GoTo Salida
    End If
   
rst.MoveFirst
    Do Until rst.EOF
        Dim tUser, tPass As String
tUser = rst.Fields(0).Value
tPass = rst.Fields(1).Value
If tUser = vUser And tUser <> "ADMINISTRADOR" Then
If tPass = vPass Then
DoCmd.Close
DoCmd.OpenForm "00 INDICE GENERAL"
Else
MsgBox "CLAVE DE ACCESO INCORRECTA", vbInformation, "INCORRECTO"
Me.txtpass.SetFocus
Me.txtpass.Value = Null
GoTo Salida
End If
End If
rst.MoveNext

tUser = rst.Fields(0).Value
tPass = rst.Fields(1).Value
If tUser = vUser And tUser = "ADMINISTRADOR" Then
If tPass = vPass Then
DoCmd.Close
DoCmd.OpenForm "00 ATENCION - onoff"
Else
MsgBox "CLAVE DE ACCESO INCORRECTA", vbInformation, "INCORRECTO"
Me.txtpass.SetFocus
Me.txtpass.Value = Null
GoTo Salida
End If
End If
rst.MoveNext
Loop
Salida:
rst.Close
Set rst = Nothing
End Sub


Espero que podais ayudarme como siempre...

Mil Gracias,
Última edición por anrapa el Jue Mar 25, 2021 8:04 am, editado 1 vez en total.

Avatar de Usuario
Sveinbjorn
Moderador
Mensajes: 1306
Registrado: Sab Oct 24, 2015 10:12 pm

Re: Error en Acceso con Contraseña

Mensajepor Sveinbjorn » Lun Mar 22, 2021 2:12 pm

Así, bote pronto, te sobra el primer rst.Movenext (y alguna otra línea que tienes duplicada, pero que no son la causa del error).

Además, puedes estructurar mucho mejor el código y hacerlo más sencillo. Puedes revisar de nuevo los ejemplo de Neckkito, porque tiene uno para acceso como administrador/usuario que te servirá de referencia.

Un saludo
Sveinbjorn El Rojo

anrapa
Nivel 4
Mensajes: 129
Registrado: Mar Feb 23, 2016 7:10 pm

Re: Error en Acceso con Contraseña

Mensajepor anrapa » Lun Mar 22, 2021 2:37 pm

Muchisimas Gracias, voy a revisar lo que me propones...

Un Saludo,

anrapa
Nivel 4
Mensajes: 129
Registrado: Mar Feb 23, 2016 7:10 pm

Re: Error en Acceso con Contraseña

Mensajepor anrapa » Mié Mar 24, 2021 9:39 am

Buenos días, he estado revisando lo que me comentabas y he conseguido hacerlo funcionar adaptando el nuevo sistema de acceso al nuestro BBDD.

Lo que más tiempo me esta llevando, es en intentar entender que es lo que sucede en el código que tenía antes, lo he mirado y remirado y corregido cosas pero no consigo detectar el error.

Podrías ayudarme ya no por hacerlo funcionar, si no por salir del bucle en el que he caido.

Mi última modificación fue la siguiente:

Código: Seleccionar todo

    Dim vUser As Variant
    Dim vPass As Variant
vUser = Me.cboUser.Value
vPass = Me.txtpass.Value

If IsNull(vUser) Then
MsgBox "No ha seleccionado ningún USUARIO", vb, "   INFORMACIÓN   "
Me.cboUser.SetFocus
    Exit Sub
    End If

If IsNull(vPass) Then
MsgBox "INTRODUZCA CLAVE DE ACCESO", vb, "   INFORMACIÓN   "
Me.txtpass.SetFocus
    Exit Sub
    End If
   
Dim rst As DAO.Recordset
Set rst = CurrentDb.OpenRecordset("TPass", dbOpenSnapshot)
If rst.RecordCount = 0 Then
    MsgBox "NO EXISTEN USUARIOS", vb, "   INFORMACIÓN   "
    GoTo Salida
    End If


    If tUser = vUser And tUser <> "ADMINISTRADOR" Then
            rst.MoveFirst
               Do Until rst.EOF
                    Dim tUser, tPass As String
                    tUser = rst.Fields(0).Value
                    tPass = rst.Fields(1).Value
                    If tPass = vPass Then
                        DoCmd.Close acForm, Me.Name
                        DoCmd.OpenForm "00 INDICE GENERAL"
                    Else
                        MsgBox "CLAVE DE ACCESO INCORRECTA", vbInformation, "INCORRECTO"
                        Me.txtpass.SetFocus
                        Me.txtpass.Value = Null
                        GoTo Salida
                    End If
                rst.MoveNext
                Loop
    ElseIf tUser = vUser And tUser = "ADMINISTRADOR" Then
                rst.MoveFirst
               Do Until rst.EOF
                    Dim tUser, tPass As String
                    tUser = rst.Fields(0).Value
                    tPass = rst.Fields(1).Value
                    If tPass = vPass Then
                        DoCmd.Close acForm, Me.Name
                        DoCmd.OpenForm "00 ATENCION - onoff"
                    Else
                        MsgBox "CLAVE DE ACCESO INCORRECTA", vbInformation, "INCORRECTO"
                        Me.txtpass.SetFocus
                        Me.txtpass.Value = Null
                        GoTo Salida
                    End If
               
                rst.MoveNext
                Loop
    End If
Salida:
rst.Close
Set rst = Nothing


Y el error que me dá es el siguiente, que aún me queda la duda de que una vez corregido, el error inicial me siga apareciendo...
Imagen

Muchisimas gracias de antemano.

Un Saludo,

DaniLopez1991
Nivel 5
Mensajes: 147
Registrado: Lun Sep 23, 2019 2:12 pm

Re: Error en Acceso con Contraseña

Mensajepor DaniLopez1991 » Jue Mar 25, 2021 9:49 am

El error esta en :

Código: Seleccionar todo

 If tUser = vUser And tUser <> "ADMINISTRADOR" Then
            rst.MoveFirst
               Do Until rst.EOF
                    Dim tUser, tPass As String


En este if Estas comparando el tUser, osea que quiere decir que YA LO TIENES DECLARADO (osea hay un sitio en el que ya tienes DIM tUser as... y al entrar en el bucle vuelves a DECLARARLO con el dim tUser....

Si lo has declarado de otra manera mas arriba lo que tienes es en vez de poner dim tUser pon str(tUser) y lo estas poniendo como string pero no PONER DIM! que sino lo estas "Iniciando" otra vez.

Saludos!

anrapa
Nivel 4
Mensajes: 129
Registrado: Mar Feb 23, 2016 7:10 pm

Re: Error en Acceso con Contraseña

Mensajepor anrapa » Jue Mar 25, 2021 4:28 pm

Ok gracias, entonces tengo que volver a revisar el codigo incial que es donde no encuentro el error... podríais indicarme donde... porque sigo en bucle.... y aunque ya lo tengo solucionado con la propuesta que me dieron, ya es mera curiosidad de aprendizaje.

Gracias,

Avatar de Usuario
Sveinbjorn
Moderador
Mensajes: 1306
Registrado: Sab Oct 24, 2015 10:12 pm

Re: Error en Acceso con Contraseña

Mensajepor Sveinbjorn » Jue Mar 25, 2021 5:27 pm

El error ya te señalé donde estaba (en el rst.movenext de más). Si ejecutas el código paso a paso, fijándote bien en cómo se comporta, verás el motivo del error inicial... O puedes compararlo con el nuevo código y ver la diferencia en el recorrido del recordset... ;)

A ver si lo descubres por tu cuenta, si no, te lo explico.
Sveinbjorn El Rojo

anrapa
Nivel 4
Mensajes: 129
Registrado: Mar Feb 23, 2016 7:10 pm

Re: Error en Acceso con Contraseña

Mensajepor anrapa » Vie Mar 26, 2021 10:20 am

Perfecto... evidentemente si lees el código ese rst.movenext le daba continuidad donde necesitaba parar...

Voy a probarlo y reprobarlo y os confirmo...

Mil Gracias,

anrapa
Nivel 4
Mensajes: 129
Registrado: Mar Feb 23, 2016 7:10 pm

Re: Error en Acceso con Contraseña

Mensajepor anrapa » Lun Mar 29, 2021 8:56 am

Muchisimas gracias, comprobado y funcionando con los compañeros desde esta mañana...

Mil Gracias nuevamente,

Un Saludo,


Volver a “Código VBA”

¿Quién está conectado?

Usuarios navegando por este Foro: Rema y 2 invitados