Problema con LOGIN

Iniciado por ka0s, 14 Septiembre 2009, 05:44 AM

0 Miembros y 1 Visitante están viendo este tema.

ka0s

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.

CitarPrivate 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!

seba123neo

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 (vb) [Seleccionar]
Option Explicit

Private rsLogin As ADODB.Rcordset

Private Sub Form_Load()
   Set rsLogin = New ADODB.Recordset
End Sub

Private Sub cmdlogin_Click()
   Call Login
End Sub

Private Sub Login()
    If txtusuario.Text = "" Then
        MsgBox "Debe Ingresar un Usuario", 16
        txtusuario.SetFocus
        Exit Sub
    End If
    If txtpassword.Text = "" Then
        MsgBox "Debe Ingresar un Password", 16
        txtpassword.SetFocus
        Exit Sub
    End If
    rsLogin.Open "SELECT login,password FROM usuarios WHERE login='" & txtusuario & "'", cn, adOpenKeyset, adLockOptimistic
    If rsLogin.EOF Then
        MsgBox "No Existe el Usuario Indicado", vbCritical
        rsLogin.Close
        Exit Sub
    Else
        If LCase(rsLogin("login")) = LCase(txtusuario) And LCase(rsLogin("password")) = LCase(txtpassword) Then
            ' si entra aca es porque accedio correctamente
        Else
            MsgBox "La Password es incorrecta", vbCritical
            rsLogin.Close
            Exit Sub
        End If
    End If
    rsLogin.Close
    Unload Me
    frmgym.Show
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.
La característica extraordinaria de las leyes de la física es que se aplican en todos lados, sea que tú elijas o no creer en ellas. Lo bueno de las ciencias es que siempre tienen la verdad, quieras creerla o no.

Neil deGrasse Tyson

ka0s

Cita de: 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 (vb) [Seleccionar]
Option Explicit

Private rsLogin As ADODB.Rcordset

Private Sub Form_Load()
   Set rsLogin = New ADODB.Recordset
End Sub

Private Sub cmdlogin_Click()
   Call Login
End Sub

Private Sub Login()
    If txtusuario.Text = "" Then
        MsgBox "Debe Ingresar un Usuario", 16
        txtusuario.SetFocus
        Exit Sub
    End If
    If txtpassword.Text = "" Then
        MsgBox "Debe Ingresar un Password", 16
        txtpassword.SetFocus
        Exit Sub
    End If
    rsLogin.Open "SELECT login,password FROM usuarios WHERE login='" & txtusuario & "'", cn, adOpenKeyset, adLockOptimistic
    If rsLogin.EOF Then
        MsgBox "No Existe el Usuario Indicado", vbCritical
        rsLogin.Close
        Exit Sub
    Else
        If LCase(rsLogin("login")) = LCase(txtusuario) And LCase(rsLogin("password")) = LCase(txtpassword) Then
            ' si entra aca es porque accedio correctamente
        Else
            MsgBox "La Password es incorrecta", vbCritical
            rsLogin.Close
            Exit Sub
        End If
    End If
    rsLogin.Close
    Unload Me
    frmgym.Show
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!!!