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!
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:
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.
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:
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!!!