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
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
rokoko escribió:
HolaA 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
Dabellaso escribió:
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
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
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
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
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
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
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
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,
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.
|
|