Evalué si la contraseña es correcta, y si es, permita abrir un formulario

Necesito validar una contraseña, para esto, mediante código le digo que me busque la contraseña en la tabla estudiantes, en el campo Cod_estudiante y si esta ahí me permita abrir otro formulario.

El código que utilizo es el siguiente:

If (Not IsNull(DLookup("[Cod_estudiante]", "Estudiantes", "[Cod_estudiante]='" & Me.txtpass.Value))) Then
DoCmd. OpenForm "Registro de Usuarios"

Pero me sale error.

2 respuestas

Respuesta
1

El error es que los datos de tipo texto han de ir entre los indicadores adecuados, has puesto uno al inicio (la comilla simple) pero no la final.

Hay mas opciones y menos comprometidas que la de utilizar Nulos, por ejemplo contar cuantas veces existe en el conjunto (si esta habrá por lo menos una coincidencia)

If DCount ("*", "Estudiantes", "[Cod_estudiante]='" & Me.txtpass & "'") > 0 Then
DoCmd. OpenForm "Registro de Usuarios"

Buen día, Enrique.

Esto es lo que coloco en el botón

If IsNull(Me.txtpass) Then
MsgBox "por favor, ingrese su contraseña", vbInformation, "contraseña requerido"
Me.txtpass.SetFocus
Else

If DCount("*", "Estudiantes", "[Cod_estudiante]='" & Me.txtpass & "'") > 0 Then
DoCmd.OpenForm "Registro de Usuarios"

else

MsgBox "Contraseña incorrecta, Vuelva a Intentarlo"

end if 

pero me sale error en la linea que me proporcionaste, no entiendo, si me puedes colaborar.

El error creo que lo provoca que se inician dos IF y solo se finaliza uno.

Si el error lo diese en la línea, la causa mas probable es que no se estén utilizando nombres de los campos en la tabla o que el dato que se le pasa sea un Null (una cadena vacía o una contraseña inadecuada no deberían dar error, devolvería un cero).

Si no se proporciona una contraseña valida, se dan las mismas circunstancias de no introducir contraseña, en el primer caso:
'Me.txtpass.SetFocus
¿No seria lógico hacerlo en ambos casos?

Si no hay contraseña soy partidario de abortar el proceso, que se envíe el foco no evita que el código continúe hasta el final, lo plantearía así:
(Y el resto queda como esta, ya no hace falta el End IF)

... original ...

If IsNull(Me.txtpass) Then
MsgBox "por favor, ingrese su contraseña", vbInformation, "contraseña requerido"
Me.txtpass.SetFocus
Else

....................... alternativa 1...........

If IsNull(Me.txtpass) Then
MsgBox "por favor, ingrese su contraseña", vbInformation, "contraseña requerido"
Me.txtpass.SetFocus
Exit Sub
End If

...................... alternativa 2........... (es una unica linea)

If IsNull(Me.txtpass) Then MsgBox "por favor, ingrese su contraseña", vbInformation, "contraseña requerido": Me.txtpass.SetFocus: Exit Sub

Private Sub Comando1_Click()

If IsNull(Me.txtPass) Then
MsgBox "por favor, ingrese su contraseña", vbInformation, "contraseña requerida"
Me.txtPass.SetFocus
Else

If DCount("*", "Estudiantes", "[Cod_estudiante]='" & Me.txtPass & "'") >0 Then
DoCmd.OpenForm "Candidatos Personero"
Else
MsgBox "Contraseña incorrecta, Vuelva a Intentarlo"
'DoCmd.Close
'DoCmd.Quit
'End If
End If

Buena tarde, Esto es lo que esta en ese botón, pero me sigue saliendo error, la tabla se llama Estudiantes, el campo Cod_estudiante, así mismo el campo de ingreso de contraseña se llama txtpass; pero me sigue saliendo error en la sentencia que me facilitaste

Lo único que se podría considerar un error es que la contraseña no se esta asociando a un usuario concreto.
Esto es: basta que la contraseña exista en el conjunto, para que la aplicación la valide sin importarle si es la de Juan o la de Antonio (carece de importancia si todos son usuarios del mismo nivel).

Lo que ha cambiado entre el ultimo post y el anterior, es que se ha añadido el End If que faltaba y dos líneas mas que están comentadas (desactivadas), una que cerraría el objeto activo (no es garantía de que sea el formulario), la otra cerraría la aplicación.

Si la ejecución se detiene al llegar a la línea con la función DCount y la línea se remarca de color amarillo, también habrá un mensaje del sistema indicando la posible causa..
(No siempre acierta pero puede ser una pista para iniciar las pesquisas).

Comenzaría por reescribir la línea (no seria la primera vez que por error se aplica un acento en lugar de la comilla simple) y añadiría en la cabecera del modulo una línea más a continuación de 'Option Compare Database' para que quedase así:

Option Compare Database
Option Explicit

Esta nueva línea fuerza la declaración de las variables, evitara errores y será una mejora al depurar el código.
¿Puedes publicar el mensaje de retorno que da al encontrar el error?

Un detalle.

Se esta validando la contraseña contra una contraseña guardada (que suele ser alfanumérica ==> Texto) o se esta validando contra el campo 'Cod_estudiante' que por el nombre se asemeja a el código del estudiante (que posiblemente sea un numero).
Si el campo 'Cod_estudiante' es de tipo numérico (sea o no el que tiene la contraseña), la función generara un error en tiempo de ejecución (se le da un texto y espera un numero).

Si este fuera el caso, la correcta seria esta (espera un numero y se le da un numero):
If DCount("*", "Estudiantes", "[Cod_estudiante]= " & Me.txtPass ) > 0 Then

Si el campo Cod_estudiante es numérico, ya me funciono con la ultima sentencia que me facilitaste.

Mil gracias ya puedo avanzar

Te quedo muy agradecido.

Respuesta
1

Así es utilice Dcount() mucho más practico, muy acertada la respuesta.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas