Foro de elhacker.net

Programación => Programación Visual Basic => Mensaje iniciado por: ka0s en 14 Septiembre 2009, 05:44 am



Título: Problema con LOGIN
Publicado por: ka0s en 14 Septiembre 2009, 05:44 am
Gente, acá molestando again :P.
Descubrí que tengo un ERROR con el login.
Lo que sucede es lo siguiente:
Si yo ingreso de usuario: ADMIN y password ADMIN apenas inicio el programa, loguea perfectamente. Si me equivoco y escribo por ejemplo ADMIN2 que no existe me colorea el textbox a ROJO avisando que nos equivocamos.

Pero que pasa, cuando ingresás nuevamente USUARIO: ADMIN, CONTRASEÑA: ADMIN ahí YA NO LO TOMA MÁS. Siempre indica que el usuario no existe...

Esto lo había arreglado usando RST.MOVEFIRST, pero me di cuenta que si la grilla (MSFlexGrid) que está en el siguiente formulario está vacía, GENERA ERROR.

"El valor de BOF O EOF ES TRUE, O EL ACTUAL REGISTRO SE ELIMINÓ, LA OPERACION SOLICITADA REQUIERE UN REGISTRO ACTUAL."

Les dejo el código del LOGIN.

Citar
Private Sub cmdlogin_Click()
'-------------LOGIN DE USUARIO-------------
'Busca en la tabla si existe el usuario.
RST.Find "Id ='" & Trim(txtusuario.Text) & "'"
'Si no existe
If RST.EOF Then
    txtusuario.BackColorSelect = &H8080FF
    txtusuario.SetFocus
Else
'Si existe, verifica los passwords y si es correcto nos lleva al formulario Principal
    If RST!Password = txtpassword.Text Then
        Unload frmlogin
        Load frmgym
        frmgym.Show
    Else
        'Sino, muestra mensaje de error
        txtpassword.BackColorSelect = &H8080FF
        txtpassword.SetFocus
    End If
End If
'Vuelve al principio, sino siempre sigue en EOF y nunca vuelve
'a la primera opcion y no loguea más...
RST.MoveFirst
End Sub

Desde ya muchas gracias!


Título: Re: Problema con LOGIN
Publicado por: seba123neo en 14 Septiembre 2009, 06:42 am
Hola, lo que pasa es que no deberias hacerlo asi como lo haces, lo ideal no seria crear un recordset, abrirlo haciendo "select * from usuarios" y recorrerlo con find y si no lo encuentra...etc. aca te paso un ejemplo de login que es re-facil, consulta la base de datos con un recodset que se usa solo para eso...por ejemplo te creas un recordset en ese form local llamado rsLogin total lo usas en ese form y despues no lo usas mas. aca te paso un ejemplo de login de esa forma:

Código
  1. Option Explicit
  2.  
  3. Private rsLogin As ADODB.Rcordset
  4.  
  5. Private Sub Form_Load()
  6.   Set rsLogin = New ADODB.Recordset
  7. End Sub
  8.  
  9. Private Sub cmdlogin_Click()
  10.   Call Login
  11. End Sub
  12.  
  13. Private Sub Login()
  14.    If txtusuario.Text = "" Then
  15.        MsgBox "Debe Ingresar un Usuario", 16
  16.        txtusuario.SetFocus
  17.        Exit Sub
  18.    End If
  19.    If txtpassword.Text = "" Then
  20.        MsgBox "Debe Ingresar un Password", 16
  21.        txtpassword.SetFocus
  22.        Exit Sub
  23.    End If
  24.    rsLogin.Open "SELECT login,password FROM usuarios WHERE login='" & txtusuario & "'", cn, adOpenKeyset, adLockOptimistic
  25.    If rsLogin.EOF Then
  26.        MsgBox "No Existe el Usuario Indicado", vbCritical
  27.        rsLogin.Close
  28.        Exit Sub
  29.    Else
  30.        If LCase(rsLogin("login")) = LCase(txtusuario) And LCase(rsLogin("password")) = LCase(txtpassword) Then
  31.            ' si entra aca es porque accedio correctamente
  32.        Else
  33.            MsgBox "La Password es incorrecta", vbCritical
  34.            rsLogin.Close
  35.            Exit Sub
  36.        End If
  37.    End If
  38.    rsLogin.Close
  39.    Unload Me
  40.    frmgym.Show
  41. End Sub

obviamente adapta los nombres de los campos a los que tengas en tu base de datos, pero eso debe funcionar bien...si queres despues ponele esos detalles de que si no escribio un usuario o password que ponga el color de los textbox en rojo como lo estas haciendo.

saludos.


Título: Re: Problema con LOGIN
Publicado por: ka0s en 14 Septiembre 2009, 20:00 pm
Hola, lo que pasa es que no deberias hacerlo asi como lo haces, lo ideal no seria crear un recordset, abrirlo haciendo "select * from usuarios" y recorrerlo con find y si no lo encuentra...etc. aca te paso un ejemplo de login que es re-facil, consulta la base de datos con un recodset que se usa solo para eso...por ejemplo te creas un recordset en ese form local llamado rsLogin total lo usas en ese form y despues no lo usas mas. aca te paso un ejemplo de login de esa forma:

Código
  1. Option Explicit
  2.  
  3. Private rsLogin As ADODB.Rcordset
  4.  
  5. Private Sub Form_Load()
  6.   Set rsLogin = New ADODB.Recordset
  7. End Sub
  8.  
  9. Private Sub cmdlogin_Click()
  10.   Call Login
  11. End Sub
  12.  
  13. Private Sub Login()
  14.    If txtusuario.Text = "" Then
  15.        MsgBox "Debe Ingresar un Usuario", 16
  16.        txtusuario.SetFocus
  17.        Exit Sub
  18.    End If
  19.    If txtpassword.Text = "" Then
  20.        MsgBox "Debe Ingresar un Password", 16
  21.        txtpassword.SetFocus
  22.        Exit Sub
  23.    End If
  24.    rsLogin.Open "SELECT login,password FROM usuarios WHERE login='" & txtusuario & "'", cn, adOpenKeyset, adLockOptimistic
  25.    If rsLogin.EOF Then
  26.        MsgBox "No Existe el Usuario Indicado", vbCritical
  27.        rsLogin.Close
  28.        Exit Sub
  29.    Else
  30.        If LCase(rsLogin("login")) = LCase(txtusuario) And LCase(rsLogin("password")) = LCase(txtpassword) Then
  31.            ' si entra aca es porque accedio correctamente
  32.        Else
  33.            MsgBox "La Password es incorrecta", vbCritical
  34.            rsLogin.Close
  35.            Exit Sub
  36.        End If
  37.    End If
  38.    rsLogin.Close
  39.    Unload Me
  40.    frmgym.Show
  41. End Sub

obviamente adapta los nombres de los campos a los que tengas en tu base de datos, pero eso debe funcionar bien...si queres despues ponele esos detalles de que si no escribio un usuario o password que ponga el color de los textbox en rojo como lo estas haciendo.

saludos.


de 10 como siempre.

Muchas gracias Seba!!!