Imprimir página | Cerrar ventana

Evitar acceso no autorizado

Impreso de: Foro de Access y VBA
Categoría: Access y VBA
Nombre del foro: Access y VBA
Descripción del foro: Foro de programacion en Access (Con código y sin código)
URL: http://www.mvp-access.com/foro/forum_posts.asp?TID=85223
Fecha de impresión: 28/Marzo/2024 a las 11:47


Tema: Evitar acceso no autorizado
Publicado por: WarriorGeardark
Asunto: Evitar acceso no autorizado
Fecha de publicación: 29/Abril/2020 a las 05:59
Hola amigos soy nuevo en el foro, y apenas estoy aprendiendo ACCESS, tengo una duda estoy haciendo un proyecto con un login, y utilizo código VBA, si ingreso un usuario y su contraseña funciona bien y también si no coincide no permitir ingresa el problema es,que hay un método para ingresar y se utilizan los caracteres especiales "'" de coma simple, como podría bloquear dichos caracteres, que solo me permite caracteres Alfanuméricos, A-Z y del 0-9, y también que se bloque el copiar y pegar en textbox por si se quieren pasar de listos y copiar los caracteres especiales, 

He leído que se hace uso del evento KeyPress que utiliza los códigos ascii pero no se como podríaaplicarlo, espero puedan ayudarme o aconsejarme que otro método utilizar para darle más seguridad a mi proyecto.



Respuestas:
Publicado por: rokoko
Fecha de publicación: 29/Abril/2020 a las 11:09
Hola
A ver que no me aclaro, quieres decir que si pones comilla simple te deja acceder, se salta la seguridad??

Si es asi entiendo que puede haber un fallo de diseño y lo correcto seria rediseñarlo.

https://www.lawebdelprogramador.com/foros/Access/1449515-Solo-permitir-Numeros-o-Letra-en-un-campo-de-texto.html" rel="nofollow - https://www.lawebdelprogramador.com/foros/Access/1449515-Solo-permitir-Numeros-o-Letra-en-un-campo-de-texto.html

https://www.lawebdelprogramador.com/foros/Access/626493-VALIDACION-EN-CAMPOSOLO-LETRAS-Y-ESPACIOS.html" rel="nofollow - https://www.lawebdelprogramador.com/foros/Access/626493-VALIDACION-EN-CAMPOSOLO-LETRAS-Y-ESPACIOS.html


Publicado por: Dabellaso
Fecha de publicación: 29/Abril/2020 a las 12:51
Publicado originalmente por WarriorGeardark WarriorGeardark escribió:

 y también que se bloque el copiar y pegar en textbox por si se quieren pasar de listos y copiar los caracteres especiales

Para esa parte existe una máscara de entrada predefinida llamada "Contraseña", puedes ponerla tanto en el campo de la tabla como en los controles textbox. Eso hará que sólo se muestren "*" e impedirá que se pueda hacer corta-pega


-------------
El saber no ocupa lugar, sólo tiempo


Publicado por: emiliove
Fecha de publicación: 29/Abril/2020 a las 15:02
Para entender lo que pasa deberías dar detalles de tu proyecto: hablar de como haces el login, y que código VBA usas.

Saludos.


Publicado por: mounir
Fecha de publicación: 29/Abril/2020 a las 15:22
Hola!

Este código te hace lo que necesitas.

Private Sub Texto0_KeyPress(KeyAscii As Integer)

Select Case KeyAscii
'No permitir añadir caracteres especiales en Text Box
Case Asc("'"), Asc(""""), Asc("?"), Asc("@"), Asc("-"), Asc("_"), Asc("*"), Asc(":"), Asc(";"), Asc("´"), Asc("`"), Asc("+")
    KeyAscii = 0 'Cancelar
Case Else
    'permitir los demás
End Select

End Sub


-------------
Un Saludo.


Publicado por: WarriorGeardark
Fecha de publicación: 30/Abril/2020 a las 07:11
Publicado originalmente por rokoko rokoko escribió:

Hola
A ver que no me aclaro, quieres decir que si pones comilla simple te deja acceder, se salta la seguridad??

Si es asi entiendo que puede haber un fallo de diseño y lo correcto seria rediseñarlo.

https://www.lawebdelprogramador.com/foros/Access/1449515-Solo-permitir-Numeros-o-Letra-en-un-campo-de-texto.html" rel="nofollow - https://www.lawebdelprogramador.com/foros/Access/1449515-Solo-permitir-Numeros-o-Letra-en-un-campo-de-texto.html

https://www.lawebdelprogramador.com/foros/Access/626493-VALIDACION-EN-CAMPOSOLO-LETRAS-Y-ESPACIOS.html" rel="nofollow - https://www.lawebdelprogramador.com/foros/Access/626493-VALIDACION-EN-CAMPOSOLO-LETRAS-Y-ESPACIOS.html
Gracias por responder, no me explique el login funciona como debería si pongo una comilla simple no se salta la seguridad más bien con las comillas simple se hace lo que llaman inyección sql, donde es que vulneran la seguridad en lo otros si esta seguro.


Publicado por: WarriorGeardark
Fecha de publicación: 30/Abril/2020 a las 07:13
Publicado originalmente por Dabellaso Dabellaso escribió:

Publicado originalmente por WarriorGeardark WarriorGeardark escribió:

 y también que se bloque el copiar y pegar en textbox por si se quieren pasar de listos y copiar los caracteres especiales

Para esa parte existe una máscara de entrada predefinida llamada "Contraseña", puedes ponerla tanto en el campo de la tabla como en los controles textbox. Eso hará que sólo se muestren "*" e impedirá que se pueda hacer corta-pega
Gracias por responder el campo de mi tabla tiene la mascara de entrada como contraseña al igual que el textbox del formulario todo se mira así ***** pero si se puede copiar de una pagina el código y lo puedo en el textbox.


Publicado por: WarriorGeardark
Fecha de publicación: 30/Abril/2020 a las 07:17
Publicado originalmente por emiliove emiliove escribió:

Para entender lo que pasa deberías dar detalles de tu proyecto: hablar de como haces el login, y que código VBA usas.

Saludos.
Muchas gracias por responder, por supuesto este el codigo de mi formulario login
Tengo dos funciones que evitan que pueda usar el ByPass y donde me desactiva la cinta de opciones
y tengo permisos para el usuario administrador y los que no lo son.
Private Sub Comando1_Click()
Dim OnOfRibbon As Integer
Dim OnOfShift As Integer

If IsNull(Me.txtUsuario) Then
        MsgBox "Por favor, escriba su Usuario", vbInformation, "Usuario requerido"
        Me.txtUsuario.SetFocus
    ElseIf IsNull(Me.txtPass) Then
        MsgBox "Por favor, ingrese su Contraseña", vbInformation, "Contraseña requerida"
        Me.txtPass.SetFocus
    Else
        If (IsNull(DLookup("[Usuario]", "Usuarios", "[Usuario] ='" & Me.txtUsuario.Value & _
        "' And Password = '" & Me.txtPass.Value & "'"))) Then
            MsgBox "Usuario y/o Contraseña incorrectos"
        Else
            OnOfShift = DLookup("Activar_Shift", "Usuarios", "Usuario = '" & Me.txtUsuario.Value & "'")
            OnOfRibbon = DLookup("Mostrar_Cinta_Opciones", "Usuarios", "Usuario = '" & Me.txtUsuario.Value & "'")
            
            UserLevel = DLookup("Admin", "Usuarios", "Usuario = '" & Me.txtUsuario.Value & "'")
            
            'Validación para Desactivar/Activar tecla Shift
            If OnOfShift = -1 Then
                    TeclaShift "AllowBypassKey", dbBoolean, True
                Else
                    TeclaShift "AllowBypassKey", dbBoolean, False
            End If
                        
                            'Validación para Mostrar/Ocultar la Cinta de Opciones
                            If OnOfRibbon = -1 Then
                                    DoCmd.ShowToolbar "Ribbon", acToolbarYes
                                Else
                                    DoCmd.ShowToolbar "Ribbon", acToolbarNo
                            End If
                            
             'Validación para identificar al Administrador
            If UserLevel = -1 Then
                LogedUser = Me.txtUsuario.Value
                LogedName = DLookup("NombreUsuario", "Usuarios", "Usuario = '" & Me.txtUsuario.Value & "'")
                LogedDeparted = DLookup("Departamento", "Usuarios", "Usuario = '" & Me.txtUsuario.Value & "'")
                DoCmd.Close
                DoCmd.OpenForm "Menu_Principal"
            Else
                LogedUser = Me.txtUsuario.Value
                LogedName = DLookup("NombreUsuario", "Usuarios", "Usuario = '" & Me.txtUsuario.Value & "'")
                LogedDeparted = DLookup("Departamento", "Usuarios", "Usuario = '" & Me.txtUsuario.Value & "'")
                DoCmd.Close
                DoCmd.OpenForm "Menu_Principal"
            End If
    End If
End If
End Sub



Publicado por: WarriorGeardark
Fecha de publicación: 30/Abril/2020 a las 07:21
Publicado originalmente por mounir mounir escribió:

Hola!

Este código te hace lo que necesitas.

Private Sub Texto0_KeyPress(KeyAscii As Integer)

Select Case KeyAscii
'No permitir añadir caracteres especiales en Text Box
Case Asc("'"), Asc(""""), Asc("?"), Asc("@"), Asc("-"), Asc("_"), Asc("*"), Asc(":"), Asc(";"), Asc("´"), Asc("`"), Asc("+")
    KeyAscii = 0 'Cancelar
Case Else
    'permitir los demás
End Select

End Sub
muchas gracias amigo eres un crack, con eso ya no me deja ingresar los caracteres especiales, y como podría evitar que copien y peguen en el textbox porque me fui a una pagina y copie el codigo con los caracteres especiales y si me deja pegarlo en el textbox.


Publicado por: xavi
Fecha de publicación: 30/Abril/2020 a las 09:23
Hola,

Varias cosas

1. En tu código hay unas cuantas ineficiencias
- Evalúas el nulo (IsNull) pero no el vacío ni espacios en blanco. Yo utilizaría combinación de Trim y Nz
- Muchos DLookup. Para un usuario y password correctos, cuento hasta 5 DLookup para recuperar información. Eso es el equivalente a 5 consultas. Es mucho mas económico de recursos utilizar un recordset filtrado dónde valides los campos.
- Algunos If son obviables
  . TeclaShift "AllowBypassKey", dbBoolean, OnOfShift  (incluso la variable es obviable si utilizas un recordset)
- La validación de UserLevel no la pillo. Juraría que hace exactamente lo mismo.

2. Creo que no podrás impedir el Copy-Paste. Lo que si puedes es validar, en el BeforeUpdate del campo (que permite cancelar el evento), si hay caracteres prohibidos.
Se trataría de tener una función que recorra, carácter a carácter, el texto y compruebe si el valor está permitido. 

Algo así:

For i = 1 To Len(Me!CuadroTexto)
  Select Case Asc(Mid(Me!CuadroTexto, i,1))
    Case 48 To 57, 65 To 90, 97 To 122
        ' Caracteres permitidos. Mayúsculas, minúsculas y números
    Case Else
        ' Carácter NO permitido
        MsgBox "Texto contiene caracteres inválidos", vbCritical, "Aviso"
        Cancel = True
        Exit Sub
  End Select
Next

Escrito al vuelo

Un saludo


-------------
Xavi, un minyó de Terrassa

http://www.llodax.com" rel="nofollow - Mi web


Publicado por: 01loko
Fecha de publicación: 30/Abril/2020 a las 09:58
como pregunta:

si se  prohibe los codigos de control: del 17 al 20, ¿impide el ctrl+v?
y si es asi, el raton cuando das pegar ¿no manda ese codigo?



-------------
Recordar de que soy nuevo y estoy aprendiendo.


Publicado por: lbauluz
Fecha de publicación: 30/Abril/2020 a las 15:35
Hola 01loko:

Los ascii 17 al 20 no tienen nada que ver con las teclas CTRL o similar, es decir, que el ctrl v lo vas a poder hacer y NO los puedes controlar por ASCII

Para controlarlo, debes mirar las propiedades del campo poniéndolo como password

O  hacerte una función similar a esta:

Private Sub NombreDeTuCampo_KeyDown(KeyCode As Integer, Shift As Integer)
    If Shift = acCtrlMask And KeyCode = vbKeyV Then KeyCode = 0
End Sub


Un saludo.

Luis




-------------
El Búho es un pajarraco


Publicado por: mounir
Fecha de publicación: 30/Abril/2020 a las 17:50
Hola!

Y para desactivar el botón derecho del ratón para que no copie de un control (Text Box" de formulario:-

propiedades de formulario >>>>>> Pestaña Otros >>>>>>> Menú Contextual lo pones a "No"

así ya tienes todo lo que necesitas.

-------------
Un Saludo.


Publicado por: Dabellaso
Fecha de publicación: 30/Abril/2020 a las 18:52
No es más sencillo pasar el contenido del Textbox a una variable y analizar/limpiar esa variable con una de las funciones LimpiaTexto que hay por el foro antes de hacer el Lookup?. 

De ese modo, si el usuario se las ingenia de alguna manera para introducir caracteres como comas, asteriscos, apostrofes, signos "=", o palabras como True,  simplemente antes de hacer el DlookUp le echamos fuera. Así, esos caracteres nunca llegarán al SQL y no podrán inyectar código

La idea es comprar la cadena limpia con la cadena introducida, si no son iguales, es que la introducida tiene caracteres no permitidos y actuamos avisando, o cerrando o lo que queramos

Hace poco xavi puso varios ejemplos en este hilo:
http://www.mvp-access.com/foro/comprobas-valor-campo-matrcula_topic85124_post512057.html" rel="nofollow - http://www.mvp-access.com/foro/comprobas-valor-campo-matrcula_topic85124_post512057.html

A mi me gustó este:
Function LimpiaTexto3(strTexto As String) As String
    For i = 1 To Len(strTexto)
        If Mid(strTexto, i, 1) Like "[A-Za-z0-9]" Then
            LimpiaTexto3 = LimpiaTexto3 & Mid(strTexto, i, 1)
        End If
    Next
End Function


Como alternativa, antes de conceder el acceso, puedes comprobar la cantidad de registros que devuelve la consulta con el were introducido

Haciendo un DCount antes del DLookup

Si la consulte devuelve un solo registro, todo bien, si devuelve varios, puedes pensar que han inyectado y negar el acceso.

Ed.
Por dar ideas.... se me ocurre que si quieres, en lugar de buscar el usuario con una consulta, puedes buscarlo con un recordset, así evitas el tema se las inyecciones, y además puedes permitir cualquier carácter en el password o el usuario. (Esto último no lo he comprobado)




-------------
El saber no ocupa lugar, sólo tiempo


Publicado por: WarriorGeardark
Fecha de publicación: 03/Junio/2020 a las 19:47
Publicado originalmente por xavi xavi escribió:

Hola,

Varias cosas

1. En tu código hay unas cuantas ineficiencias
- Evalúas el nulo (IsNull) pero no el vacío ni espacios en blanco. Yo utilizaría combinación de Trim y Nz
- Muchos DLookup. Para un usuario y password correctos, cuento hasta 5 DLookup para recuperar información. Eso es el equivalente a 5 consultas. Es mucho mas económico de recursos utilizar un recordset filtrado dónde valides los campos.
- Algunos If son obviables
  . TeclaShift "AllowBypassKey", dbBoolean, OnOfShift  (incluso la variable es obviable si utilizas un recordset)
- La validación de UserLevel no la pillo. Juraría que hace exactamente lo mismo.

2. Creo que no podrás impedir el Copy-Paste. Lo que si puedes es validar, en el BeforeUpdate del campo (que permite cancelar el evento), si hay caracteres prohibidos.
Se trataría de tener una función que recorra, carácter a carácter, el texto y compruebe si el valor está permitido. 

Algo así:

For i = 1 To Len(Me!CuadroTexto)
  Select Case Asc(Mid(Me!CuadroTexto, i,1))
    Case 48 To 57, 65 To 90, 97 To 122
        ' Caracteres permitidos. Mayúsculas, minúsculas y números
    Case Else
        ' Carácter NO permitido
        MsgBox "Texto contiene caracteres inválidos", vbCritical, "Aviso"
        Cancel = True
        Exit Sub
  End Select
Next

Escrito al vuelo

Un saludo
gracias lo tomare en cuenta tus consejos, apenas soy nuevo en esto de vba, buscare la forma de lograr un login mejor optimizado.


Publicado por: WarriorGeardark
Fecha de publicación: 03/Junio/2020 a las 19:49
Publicado originalmente por 01loko 01loko escribió:

como pregunta:

si se  prohibe los codigos de control: del 17 al 20, ¿impide el ctrl+v?
y si es asi, el raton cuando das pegar ¿no manda ese codigo?

lo bloquee donde dice menú contextual, no se donde vi un comentario que decia eso, eso evita que pueda usar el copiar y pegar con click derecho.


Publicado por: WarriorGeardark
Fecha de publicación: 03/Junio/2020 a las 19:52
Publicado originalmente por mounir mounir escribió:

Hola!

Y para desactivar el botón derecho del ratón para que no copie de un control (Text Box" de formulario:-

propiedades de formulario >>>>>> Pestaña Otros >>>>>>> Menú Contextual lo pones a "No"

así ya tienes todo lo que necesitas.
gracias eso hice solo me falta lo del teclado


Publicado por: javier.mil
Fecha de publicación: 04/Junio/2020 a las 00:24
Siempre he asociado las inyecciones SQL con bases de datos conectadas a sitios web públicos.
Nunca antes había considerado preocuparme por la inyección de SQL en aplicaciones de Access

He realizado algunas pruebas
En un cuadro de texto poniendo algo parecido a esto

JAVIER'; DROP TABLE tblUsuarios;


Y No he conseguido borrar ninguna tabla,....... ojo No digo que No sea posible ,........ pero parece raro que sea posible en Access.....

 



-------------
https://www.accessdemo.info" rel="nofollow - https://www.accessdemo.info





Publicado por: WarriorGeardark
Fecha de publicación: 04/Junio/2020 a las 00:25
Publicado originalmente por Dabellaso Dabellaso escribió:

No es más sencillo pasar el contenido del Textbox a una variable y analizar/limpiar esa variable con una de las funciones LimpiaTexto que hay por el foro antes de hacer el Lookup?. 

De ese modo, si el usuario se las ingenia de alguna manera para introducir caracteres como comas, asteriscos, apostrofes, signos "=", o palabras como True,  simplemente antes de hacer el DlookUp le echamos fuera. Así, esos caracteres nunca llegarán al SQL y no podrán inyectar código

La idea es comprar la cadena limpia con la cadena introducida, si no son iguales, es que la introducida tiene caracteres no permitidos y actuamos avisando, o cerrando o lo que queramos

Hace poco xavi puso varios ejemplos en este hilo:
http://www.mvp-access.com/foro/comprobas-valor-campo-matrcula_topic85124_post512057.html" rel="nofollow - http://www.mvp-access.com/foro/comprobas-valor-campo-matrcula_topic85124_post512057.html

A mi me gustó este:
Function LimpiaTexto3(strTexto As String) As String
    For i = 1 To Len(strTexto)
        If Mid(strTexto, i, 1) Like "[A-Za-z0-9]" Then
            LimpiaTexto3 = LimpiaTexto3 & Mid(strTexto, i, 1)
        End If
    Next
End Function


Como alternativa, antes de conceder el acceso, puedes comprobar la cantidad de registros que devuelve la consulta con el were introducido

Haciendo un DCount antes del DLookup

Si la consulte devuelve un solo registro, todo bien, si devuelve varios, puedes pensar que han inyectado y negar el acceso.

Ed.
Por dar ideas.... se me ocurre que si quieres, en lugar de buscar el usuario con una consulta, puedes buscarlo con un recordset, así evitas el tema se las inyecciones, y además puedes permitir cualquier carácter en el password o el usuario. (Esto último no lo he comprobado)


te agradezco la respuesta son buenas ideas, de usar variables en lugar de hacer de los DLookup, y con un recordset para evitar los inyecciones sql, pero no se como aplicarlo en código soy nuevo en esto de VBA, lei el hilo que citaste que igual me parecio bien pero no logre hacerlo funcionar.


Publicado por: javier.mil
Fecha de publicación: 04/Junio/2020 a las 00:36
Un pregunta: Con tu codigo original crees que te pueden injectar SQL y romper la seguridad ?


-------------
https://www.accessdemo.info" rel="nofollow - https://www.accessdemo.info





Publicado por: WarriorGeardark
Fecha de publicación: 04/Junio/2020 a las 01:00
Publicado originalmente por javier.mil javier.mil escribió:

Un pregunta: Con tu codigo original crees que te pueden injectar SQL y romper la seguridad ?
si es que vi un código básico que era usado en sitios web y se me dio la curiosidad de probarlo en mi proyecto de access y cuando lo ingrese en el login se paso la seguridad, y probe escribiendo un usuario que no existía y no pasaba, también con uno que si existia con la contraseña mala e igual no pasaba pero ese código se brinco el login, el proyecto lo tendré en una red que será local y se que no cualquier persona tendrá el acceso pero más que nada me salió esa inquietud para futuros proyectos.


Publicado por: xavi
Fecha de publicación: 04/Junio/2020 a las 01:05
@WarriorGeardark: intenta evitar el abuso de citas. Citar el texto completo no aporta (casi) nada al mensaje. 

Este último mensaje tuyo es obvio que responde al inmediatamente anterior por lo que la cita es redundante.

El uso de las citas es más adecuado para extraer/contestar partes de un mensaje.

Gracias


-------------
Xavi, un minyó de Terrassa

http://www.llodax.com" rel="nofollow - Mi web


Publicado por: WarriorGeardark
Fecha de publicación: 04/Junio/2020 a las 19:10
Oks @xavi, no sabía, apenas me estoy adaptando para utilizar el foro, no quiero causar molestias, gracias por decirme.


Publicado por: jilo
Fecha de publicación: 05/Junio/2020 a las 07:34
Hola,

En vez de ir caracter a caracter otra opción es usa el objeto expresiones regulares.

Te dejo una función que te devuelve falso sí en la cadena que le pasas hay alguno o varios caracteres que no sean letras MAY y/o MIN y/o numeros y he puesto tambien que permita el subguión.
Espero te sirva

Function Comprueba(cadena As String) As Boolean
   With CreateObject("VBScript.RegExp")
      .Pattern = "[^A-Za-z0-9_]"
      Comprueba = .Test(cadena)
   End With
   Comprueba = Not Comprueba
End Function



-------------
Espero te sirva !!!!!!
Iñaki


Publicado por: WarriorGeardark
Fecha de publicación: 10/Junio/2020 a las 01:40
gracias @jilo, lo voy a intentar disculpa mi ignorancia pero ¿Dónde colocaría este código en un modulo? o en el código de mi login, 
Cita
Private Sub Comando1_Click()
Dim OnOfRibbon As Integer
Dim OnOfShift As Integer

If IsNull(Me.txtUsuario) Then
        MsgBox "Por favor, escriba su Usuario", vbInformation, "Usuario requerido"
        Me.txtUsuario.SetFocus
    ElseIf IsNull(Me.txtPass) Then
        MsgBox "Por favor, ingrese su Contraseña", vbInformation, "Contraseña requerida"
        Me.txtPass.SetFocus
    Else
        If (IsNull(DLookup("[Usuario]", "Usuarios", "[Usuario] ='" & Me.txtUsuario.Value & _
        "' And Password = '" & Me.txtPass.Value & "'"))) Then
            MsgBox "Usuario y/o Contraseña incorrectos"
        Else
            OnOfShift = DLookup("Activar_Shift", "Usuarios", "Usuario = '" & Me.txtUsuario.Value & "'")
            OnOfRibbon = DLookup("Mostrar_Cinta_Opciones", "Usuarios", "Usuario = '" & Me.txtUsuario.Value & "'")
            
            UserLevel = DLookup("Admin", "Usuarios", "Usuario = '" & Me.txtUsuario.Value & "'")
            
            'Validación para Desactivar/Activar tecla Shift
            If OnOfShift = -1 Then
                    TeclaShift "AllowBypassKey", dbBoolean, True
                Else
                    TeclaShift "AllowBypassKey", dbBoolean, False
            End If
                        
                            'Validación para Mostrar/Ocultar la Cinta de Opciones
                            If OnOfRibbon = -1 Then
                                    DoCmd.ShowToolbar "Ribbon", acToolbarYes
                                Else
                                    DoCmd.ShowToolbar "Ribbon", acToolbarNo
                            End If
                            
             'Validación para identificar al Administrador
            If UserLevel = -1 Then
                LogedUser = Me.txtUsuario.Value
                LogedName = DLookup("NombreUsuario", "Usuarios", "Usuario = '" & Me.txtUsuario.Value & "'")
                LogedDeparted = DLookup("Departamento", "Usuarios", "Usuario = '" & Me.txtUsuario.Value & "'")
                DoCmd.Close
                DoCmd.OpenForm "Menu_Principal"
            Else
                LogedUser = Me.txtUsuario.Value
                LogedName = DLookup("NombreUsuario", "Usuarios", "Usuario = '" & Me.txtUsuario.Value & "'")
                LogedDeparted = DLookup("Departamento", "Usuarios", "Usuario = '" & Me.txtUsuario.Value & "'")
                DoCmd.Close
                DoCmd.OpenForm "Menu_Principal"
            End If
    End If
End If
End Sub

Private Sub Form_Load()
TeclaShift "AllowBypassKey", dbBoolean, False 'Desactiva la tecla Shift
DoCmd.ShowToolbar "Ribbon", acToolbarNo 'Oculta la Cinta de Opciones

Me.txtUsuario.SetFocus

End Sub

Private Sub txtUsuario_KeyPress(KeyAscii As Integer)
If (KeyAscii >= 97 And KeyAscii <= 122) Or (KeyAscii = 225) Or (KeyAscii = 233) Or (KeyAscii = 237) Or (KeyAscii = 241) Or (KeyAscii = 243) Or (KeyAscii = 250) Then
        KeyAscii = VBA.Asc(VBA.UCase(VBA.Chr(KeyAscii)))
    End If
End Sub


Publicado por: jilo
Fecha de publicación: 10/Junio/2020 a las 08:11
Hola, Yo lo pondría al principio antes de evaluar sí es null el usuario y el password. Y la Funcion Comprueba la pondría en un módulo cualquiera.
Además manejando los datos con NZ puedes controlar si es nulo y podrías igual quitar los if isnull ya que sí es null no te pasará.
Tal que así
Private Sub Comando1_Click()
Dim OnOfRibbon As Integer
Dim OnOfShift As Integer

if Not Comprueba (nz(Me.txtUsuario," ")) Or Not Comprueba (nz(Me.txtPass," ")) then
  Msgbox "Caracteres no permitidos",,"Error"
  exit sub
End if

If IsNull(Me.txtUsuario) Then
'....




-------------
Espero te sirva !!!!!!
Iñaki


Publicado por: WarriorGeardark
Fecha de publicación: 10/Junio/2020 a las 22:19
@jilo muchas gracias, me funciono de maravilla, ya con esto me puedo olvidar de que traten de copiar y pegar los caracteres inválidos, esta respuesta es la que me funciono.


Publicado por: WarriorGeardark
Fecha de publicación: 10/Junio/2020 a las 22:19
La respuesta de @jilo es la que me funciono ya pueden cerrar este hilo, gracias a todos por su ayuda.



Imprimir página | Cerrar ventana