Foros del Web » Programación para mayores de 30 ;) » Programación General »

Falla en validar Login y Password

Estas en el tema de Falla en validar Login y Password en el foro de Programación General en Foros del Web. Holo tengo mi programita en el cual estoy intentando poner un Form para autentificar a los usuarios, lo que hace es que si el Usuario ...
  #1 (permalink)  
Antiguo 24/08/2004, 17:18
Avatar de Cuezaltzin  
Fecha de Ingreso: diciembre-2003
Ubicación: Frente al Monitor
Mensajes: 252
Antigüedad: 20 años, 5 meses
Puntos: 0
Exclamación Falla en validar Login y Password

Holo tengo mi programita en el cual estoy intentando poner un Form para autentificar a los usuarios, lo que hace es que si el Usuario no existe te manda un error hasta aqui esta bien, pero cuando le escribo el Usuario y Contraseña correctos me marca que no existe esa contraseña. Alguien me puede ayudar y decirme en que estoy mal. Por su ayuda GRACIAS.

Dim cnGeneral As ADODB.Connection
Dim rsGeneral As ADODB.Recordset
Dim Probar As String

Private Sub Entrar_Click()

Dim Prrobar As String

Login = Login
Passwor = Password

If Login = "" Then
MsgBox "ERROR DEBE INTRODUCIR UN LOGIN", vbInformation
Login.SetFocus
ElseIf Password = "" Then
MsgBox "ERROR DEBE INTRODUCIR UNA C0ONTRASEÑA", vbInformation
Password.SetFocus
ElseIf Login <> "" And Password <> "" Then

Set DataGrid1.DataSource = Adodc1
With Adodc1

.ConnectionString = "DRIVER={SQL Server};SERVER=Edgar;UID=;PWD=;DATABASE=AgendaVB"
.RecordSource = "Select Acceso.Usuario,Acceso.Contraseña From Acceso Where Acceso.Usuario = '" & Login & "' "
.Refresh
.Visible = False

End With

If Adodc1.Recordset.RecordCount <= 0 Then
MsgBox "USUARIO INEXISTENTE", vbInformation

Else
Probar = Adodc1.Recordset.Fields!Contraseña

If Password = Probar Then
Inicio.Show
Else
MsgBox "CONTRASEÑA NO VALIDA", vbInformation
End If

End If

End If

End Sub
__________________
Hasta la victoria Siempre.
  #2 (permalink)  
Antiguo 25/08/2004, 00:21
Avatar de aavg  
Fecha de Ingreso: abril-2002
Ubicación: Morelia México
Mensajes: 356
Antigüedad: 22 años
Puntos: 1
Por donde empezare....

Bueno en primer lugar tienes declaradas conexiones de tipo ADODB que a mi punto de vista son muy buenas y muy flexibles, pero luego viene lo raro de tu código ...

Le estas asignando a un DataGrid un control Data, cosa que son muy faciles de usar los controles Data pero poco flexibles y poco eficientes.

Si ya declaraste una conexion del Tipo ADODB pues abrela con tu ConnectionString = "DRIVER={SQL Server};SERVER=Edgar;UID=;PWD=;DATABASE=AgendaVB"

pero asignaselo a cnGeneral no al Adodc1

Ya se que puede que pretendas utilizar la informacion que cargas en el Grid, pero vamos por pasos, lo primero es autenticar la entrada del usuario.

Ahora tienes al inicio de tu funcion estas variables

Login = Login
Passwor = Password

No veo donde estas declarando el tipo a estas variables y explicanos un poco si Login y Password son los nombres de tus TextBox o algo por el estilo.


Despues estas tratando de hacer una comparacion de esta manera
"If Password = Probar Then"
Existe una funcion para comparar cadenas que se llama StrCmp que compara dos cadenas, pero no hagas la comparacion de esa manera (tal vez hasta el problema podria estar siendo en este punto).

Especificanos si si encuentra al usuario y solo la contraseña es la que no te esta verificando bien, porque en ese caso el problema seguro sera que no estas utilizando el StrCmp.

Si aun asi no te queda claro pues solo contesta y te pongo un pequeño ejemplo de código.
__________________
Abraham Velasco
Usuario # 516 en los Foros del Web.
El hombre no vale por lo que sabe, sino por lo que transmite
C'est parce qu'il y a un Dieu que nous sommes libres
  #3 (permalink)  
Antiguo 25/08/2004, 00:25
Avatar de aavg  
Fecha de Ingreso: abril-2002
Ubicación: Morelia México
Mensajes: 356
Antigüedad: 22 años
Puntos: 1
Otra cosa que olvide mencionar es que te puedes evitar la primera comparacion de si el usuario existe y es mucho mas cómodo para los usuarios del sistema que cargues los nombres de tus usuarios en un ComboBox del Tipo 2 en el que el usuario no pueda escribir, solo seleccionar, asi seria muy comodo elegir un usuario (que tu lo cargaste por lo cual existe) y solo le haces un select a ese usuario y ya la comparacion de cadenas es fácil"
__________________
Abraham Velasco
Usuario # 516 en los Foros del Web.
El hombre no vale por lo que sabe, sino por lo que transmite
C'est parce qu'il y a un Dieu que nous sommes libres
  #4 (permalink)  
Antiguo 25/08/2004, 13:52
Avatar de Cuezaltzin  
Fecha de Ingreso: diciembre-2003
Ubicación: Frente al Monitor
Mensajes: 252
Antigüedad: 20 años, 5 meses
Puntos: 0
Hola de nuevo ya corregi mi codigo en base a las sugerencias de aavg pero sigo teniendo el mismo problema por que si pongo el usuario y contraseña correcta me sigue mandando el erro de contraseña inexictente en que estoy mal.

Private Sub Entrar_Click()

Log = Login
Pass = Password

'''''Login y Password son los Text

If Log = "" Then
MsgBox "ERROR DEBE INTRODUCIR UN LOGIN", vbInformation
Log.SetFocus
ElseIf Pass = "" Then
MsgBox "ERROR DEBE INTRODUCIR UNA C0ONTRASEÑA", vbInformation
Pass.SetFocus
ElseIf Log <> "" And Pass <> "" Then

Set cnGeneral = New ADODB.Connection
cnGeneral.Open "DRIVER={SQL Server};SERVER=Edgar;UID=;PWD=;DATABASE=AgendaVB"

Set rs = New ADODB.Recordset
rs.Source = "Select Usuario,Contraseña From Acceso Where Usuario = '" & Log & "'"
rs.Open , cnGeneral

If rs.EOF Then
MsgBox "USUARIO INEXISTENTE", vbInformation
Login.SetFocus

ElseIf Not rs.EOF Then

If Pass = rs.Fields("Usuario") Then
Show
Print Log
Print rs.Fields("Usuario")
Print Pass
Print rs.Fields("Contraseña")

Else
MsgBox "CONTRASEÑA INVALIDA", vbInformation
Password.SetFocus

End If
End If
End If


End Sub
__________________
Hasta la victoria Siempre.

Última edición por Cuezaltzin; 25/08/2004 a las 13:55
  #5 (permalink)  
Antiguo 27/08/2004, 00:30
Avatar de aavg  
Fecha de Ingreso: abril-2002
Ubicación: Morelia México
Mensajes: 356
Antigüedad: 22 años
Puntos: 1
Mañana pongo un pequeño ejemplo de como validar contraseñas...
__________________
Abraham Velasco
Usuario # 516 en los Foros del Web.
El hombre no vale por lo que sabe, sino por lo que transmite
C'est parce qu'il y a un Dieu que nous sommes libres
  #6 (permalink)  
Antiguo 27/08/2004, 00:36
Avatar de aavg  
Fecha de Ingreso: abril-2002
Ubicación: Morelia México
Mensajes: 356
Antigüedad: 22 años
Puntos: 1
Segun lo que veo en tu codigo, estas comparando la variable PASS de la contraseña con el campo "Usuario" del RS en lugar de con el campo "Contraseña".

Aparte de que las cadenas no las puedes comparar con el signo igual, debes compararlas con la funcion STRCMP

Te recomiendo tambien el uso de puntos de interrupcion para que vayas corriendo tu programa paso a paso y sepas en todo momento que valores toman tus variables, si nunca has usado la ejecucion paso por paso con puntos de interrupcion bien valdria la pena intentarlo, te saca de muchos problemas como este que tienes.
__________________
Abraham Velasco
Usuario # 516 en los Foros del Web.
El hombre no vale por lo que sabe, sino por lo que transmite
C'est parce qu'il y a un Dieu que nous sommes libres
  #7 (permalink)  
Antiguo 27/08/2004, 17:25
Avatar de Cuezaltzin  
Fecha de Ingreso: diciembre-2003
Ubicación: Frente al Monitor
Mensajes: 252
Antigüedad: 20 años, 5 meses
Puntos: 0
Gracias por la atencion aavg, pero por que cuando imprimo los dos text de mi Form y los dos campos de mi base de datos si esta bien ejemplo:
Log = ivan ' los datos de los text
Pass=hola
Usuario= ivan ' Datos de los campos de mi Base de datos
Contraseña=hola

Bien hasta aqui todo bien. eh probado hacer lo siguiente:

If Password = "hola" Then
Bienvenido.Show
Else
MsgBox "CONTRASEÑA NO VALIDA", vbInformation
Password.SetFocus
End If

Por que si hago esto si me redirecciona al Form de Bienvenida y en cambio si hago esto siempre ,me dice que la contraseña no es valida:
If Password = rs.Field("Contraseña") Then
__________________
Hasta la victoria Siempre.
  #8 (permalink)  
Antiguo 27/08/2004, 20:35
 
Fecha de Ingreso: septiembre-2003
Mensajes: 172
Antigüedad: 20 años, 7 meses
Puntos: 0
Hola, has mirado que la contraseña de la BD no tenga espacios en blanco? Podrias asegurarte pondiendo algo así:

If trim(Password)=trim(Cstr(rs.fields("Contraseña")))

El CStr es para forzar la conversion a cadena del campo del recordset, que en principio es un variant. El trim te quita los espacios en blanco a derecha e izquierda. Por otro lado yo no me complicaria y lo pondria directamente en el SQL como una condición más Usuario='" & log & "' and Contraseña='" & pass & "'", así con el rs.eof ya podrias verificar si la entrada es correcta o no.

Saludos!
__________________
Sr.Propio
  #9 (permalink)  
Antiguo 28/08/2004, 14:10
Avatar de aavg  
Fecha de Ingreso: abril-2002
Ubicación: Morelia México
Mensajes: 356
Antigüedad: 22 años
Puntos: 1
Buena sugerencia de Rafapaskual, solo que Cuezaltzin ya van como 3 veces que te recomiendo que uses la funcion de comparacion de cadenas del vbasic STRCMP y no me has prestado atencion
__________________
Abraham Velasco
Usuario # 516 en los Foros del Web.
El hombre no vale por lo que sabe, sino por lo que transmite
C'est parce qu'il y a un Dieu que nous sommes libres
  #10 (permalink)  
Antiguo 01/09/2004, 11:30
 
Fecha de Ingreso: agosto-2004
Mensajes: 4
Antigüedad: 19 años, 8 meses
Puntos: 0
hola yo tengo el mismo problema......
este es mi codigo , pero kiero ke le diga un mensaje al usuario indicandole cuando ha ngresado un usuario o password incorrectas

sDSN = "DSN=BDinred;"
sConnect = sConnect & "UID=" & txtUID.Text & ";"
sConnect = sConnect & "PWD=" & txtPWD.Text & ";"
sADOConnect = "PROVIDER=MSDASQL;" & sDSN & sConnect
Set gconnection = New Connection
gconnection.Open sADOConnect***
Me.Hide
Load frmmenu
frmmenu.Show


¿como lo yhago para ke compare ?, donde estan los *** "Error de inicio de secion del usuario" pero yo kiero ke me salga un msgbox
  #11 (permalink)  
Antiguo 01/09/2004, 13:34
 
Fecha de Ingreso: septiembre-2003
Mensajes: 172
Antigüedad: 20 años, 7 meses
Puntos: 0
Mensaje

Hola,
Este último post no lo entiendo, tu que tienes una base de datos con una tabla de usuarios o una base de datos con usuarios para acceder a esa base de datos? tal y como lo tienes parece que sea el último caso pero en los mensajes anteriores parece lo contrario! jeje que lio!

Te doy mi versión si lo que tienes es una tabla con usuarios haz algo así:

Dim Cnn as new ADODB.Connection
Dim Rs as ADODB.Recordset
Dim SQL as String

cnn.conectionstring= La cadena de conexión que necesites
cnn.open
set Rs=new ADODB.Recordset
SQL="Select usuario, password from USUARIOS where USUARIO='" & Trim(txtUsuario.text) & "'"
Rs.open SQL,cnn

if not (rs.eof and rs.bof) then 'si se cumple esto es que existe el usuario
if trim(CStr(rs.fields(1).value))=trim(txtPasswd.text ) then 'si se cumple esto el password es correcta
Tirapalante.show
UNload me
else
msgbox "La contraseña no es válido"
end if
else
msgbox "El usuario no existe"
end if

rs.close
cnn.close

Esto deberia irte, el único problema es que si la contraseña tiene un valor NULL el CSTR de generará un error. Falta controlar los errores del recordset, la conexion y el del valor NULL.

Espero que te sirva!! Saludos!
__________________
Sr.Propio
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta

SíEste tema le ha gustado a 1 personas




La zona horaria es GMT -6. Ahora son las 10:06.