Access - Ayuda con código

   
Vista:

Ayuda con código

Publicado por dani (10 intervenciones) el 03/07/2008 11:04:12
Por favor necesito ayuda con el siguiente código:

Private Sub Aceptar_Click()
Dim n As Integer
Dim intentos As Integer

On Error GoTo TratoError

If IsNull(Form_Acceso.Usuario) Or Form_Acceso.Usuario = "" Then Form_Acceso.Usuario.SetFocus: Exit Sub
If IsNull(Form_Acceso.Password) Or Form_Acceso.Password = "" Then Form_Acceso.Password.SetFocus: Exit Sub

intentos = 0
If (Usuario = Form_Acceso.Usuario) And (Password = Form_Acceso.Password) Then
DoCmd.OpenForm "Form_PanelControl", acNormal, , , acFormReadOnly, acWindowNormal
Else
MsgBox "Usuario o contraseña incorrectos.", vbInformation, " Error"
intentos = intentos + 1
If intentos = 3 Then
DoCmd.Close acForm, "Acceso"
MsgBox "No está autorizado a utilizar esta aplicación.", vbCritical, " Tres intentos fallidos"
Application.Quit
Else
Form_Acceso.Password = ""
Form_Acceso.Password.SetFocus: Exit Sub
End If
End If
TratoError:
MsgBox "Error: " & Err.Description
End Sub

La idea es que cuando abran la base de datos, se abre el formulario Acceso, donde deben escribir el usuario y su correspondiente contraseña (estos dos campos del formulario acceso son independientes). La comparación de los datos pedidos en el formulario se hace con una tabla oculta llamada passwd, donde estan introducidos todos los usuarios y sus respectivas claves. Si los usuarios y claves coinciden se abre el formulario panel de control y si no coinciden muestra un mensaje de clave incorrecta. Al 3 intento que no coincidan se cierra la aplicación.

Pienso que el código está mas o menos correcto, le he dado mil vueltas y no veo que puede estar mal. Gracias de nuevo por anticipado.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Ayuda con código

Publicado por xavi (26 intervenciones) el 03/07/2008 11:43:33
Hola,

Aunque se podria complicar muchisimo más (al segundo intento salgo y asi nunca llego a 3) te voy a poner las minimas modificaciones que yo haria:

Private Sub Aceptar_Click()
Dim n As Integer
Static intentos As Integer ' observa este cambio de Dim a Static

On Error GoTo TratoError

If Trim(Nz(Me!Usuario, "")) Or Trim(Nz(Me!Password, "")) Then
MsgBox "Faltan datos", vbCritical, "AVISO"
Exit Sub
End If

If DLookup("Password", "passwd", "Usuario='" & Me!Usuario & "'") = Me!Password Then
DoCmd.OpenForm "Form_PanelControl", acNormal, , , acFormReadOnly, acWindowNormal
Else
MsgBox "Usuario o contraseña incorrectos.", vbInformation, " Error"
intentos = intentos + 1
If intentos = 3 Then
DoCmd.Close acForm, "Acceso"
MsgBox "No está autorizado a utilizar esta aplicación.", vbCritical, " Tres intentos fallidos"
Application.Quit
Else
Form_Acceso.Password = ""
Form_Acceso.Password.SetFocus: Exit Sub
End If
End If
TratoError:
MsgBox "Error: " & Err.Description
End Sub

Escrito del tiron

Pero ya te digo que se puede complicar bastante más. Puedes utilizar un campo de esa tabla oculta que guarde el número de intentos y, de esa forma, no se podrá salir y volver a entrar para resetear el contador de intentos.

Un saludo

Xavi
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Ayuda con código

Publicado por dani (10 intervenciones) el 03/07/2008 15:43:38
Gracias Xavi por tu pronta respuesta. He probado y continua saliendo el mismo error en la siguiente línea:

DoCmd.OpenForm "Form_PanelControl", acNormal, , , acFormReadOnly, acWindowNormal

"El nombre del formulario "Form_PanelControl" está mal escrito o hace referencia a un formulario que no existe".

Puede ser que sea porque el formulario es el del panel de control?

He probado también a crear un nuevo panel de control y modificar el formulario PanelControl para que sea un formulario independiente. Pero ni así.

Gracias de nuevo por tu ayuda.

Dani
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Ayuda con código

Publicado por Enrique (1299 intervenciones) el 03/07/2008 17:52:04
Dani, en otro mensaje tuyo anterior a este, me pareció leer que el Formulario se llama "PanelControl", si es así, ¿ para qué le antepones Form_ ? por eso Access te dice que no encuentra el Formulario o que no existe.

Por otra parte, observo que el código que has pegado aquí lo has sacado de un ejemplo mío de nombre "Control de Usuarios" cuyo Link de descarga puse hace tiempo en este Foro a petición de otro compañero, pero lo has interpretado mal, pués has hecho cambios que lo han "distorsionado" por decirlo de alguna forma ya que el ejemplo funcionaba perfectamente.

En mi ejemplo lo que hace es abrir directamente "PanelControl" al abrir la mdb y sobre este Formulario se abre inmediatamente otro pequeño formulario en Emergente y Modal para introducir el Usuario y la Contraseña. Al estar abierto ya PanelControl, desde el Form "frmLogin" en caso de que coincidan Usuario y Contraseña, se cierra "frmLogin" y ya estamos dentro pero si no coinciden, al tercer intento se cierra la base. Ten en cuenta que si no abres de entrada el "PanelControl", se verá la ventana de base de datos debajo del form para introducir Usuario y Contraseña y eso queda muy antiestético.

Vuelve a revisar detenidamente el ejemplo tal como está y verás como no es tan complicado. Aquí lo tienes y además con algunas modificaciones posteriores:

http://valsoen.iespana.es/Descargas/Varios/ControlDeUsuarios.zix

Se descargará como archivo comprimido en ZIP conteniendo 2 mdb's y 1 txt de ayuda (imprescindible leerlo).

Saludos y suerte
Enrique
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Ayuda con código

Publicado por dani (10 intervenciones) el 04/07/2008 10:56:39
Buenas Enrique,

Muchas gracias por tu ayuda. No se como no caí en el error del nombre del formulario. Era de cajón.

Efectivamente el código lo saque de uno de tus ejemplos que tanto nos ayudan y funciona correctamente tal y como dices.
Lo "adapté" en cierta forma por la premura a que estuviera ya funcionando y como es en cierta forma provisional, no tenia sentido invertir más tiempo del necesario, ya que no es una de mis funciones en la empresa. De todas formas te agradezco tu interés y ayuda. Me guardo copia del zip que me has enviado, por si en mi tiempo libre puedo usuarlo para mejorar la base de datos.

Un saludo,

Dani
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar