Visual Basic Foro
Programación => Visual Basic 6 => Mensaje iniciado por: florazulceleste en Agosto 28, 2011, 04:49:53 am
-
Hola! estoy haciendo un proyecto en VB 6.0 en el cual debe de tener un formulario para iniciar sesion y asi poder ingresar al MDIForm, segun la informacion que eh encontrado, e notado que se refieren mucho a lo que es un "Sub Main", pero el form que realizo no tiene nada que ver con ello, asi que tambien me gustaria saber si TIENE QUE ser asi.
uso el codigo que posteo a continuacion:
Dim base As New Connection
Dim rs As New ADODB.Recordset
Public Function sqlUsuario(us As String, cont As String)
sqlUsuario = "select Usuario, Contrasena from Usuario where (Usuario = '" & _
us & "' and Contrasena = '" & cont & "')"
End Function
Private Sub cmdentrar_Click()
If txtusuario <> "" Then
If txtcontrasena <> "" Then
BD.BeginTrans
BD.Execute sqlUsuario(txtusuario, txtcontrasena), adCmdText
BD.CommitTrans
With rs
.MoveFirst
Do While Not .EOF
If !Usuario = txtusuario And !Contrasena = txtcontrasena Then
MDIFormST.Show
frmIniciarSesion.Hide
MsgBox ("Bienvenido (a) " & txtusuario & "")
Else
MsgBox ("Datos Incorrectos")
txtusuario.SetFocus
End If
.MoveNext
Loop
End With
Else: MsgBox ("Introduzca su Contraseña")
txtcontrasena.SetFocus
End If
Else: MsgBox ("Introsuzca su Nombre de Usuario")
txtusuario.SetFocus
End If
End Sub
Private Sub conex()
conexion = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\LO MIO\Transito\BDTransito.accdb;Persist Security Info=False"
Set BD = New ADODB.Connection
BD.Open conexion
End Sub
Private Sub Form_Load()
conex
rs.Open sqlUsuario(txtusuario, txtcontrasena), BD, 2, 3
End Sub
pero no me funciona, ya que el primer error que da es: "Error 3021: el valor de BOF y EOF es true la ....... operacion solicitada requiere un registro actual" :'(
.MoveFirstasi que El asunto principal es que no se realmente cual es el codigo para poder realizar este formulario, me dan un ejemplo de como llevarlo a cabo???
GRACIAS, por tomarse el tiempo de responder!! ;D
-
Todo proyecto tiene Sub Main, que quieras arrancar con el es otra cosa. Fijate en el Menu \ Proyecto \ Propiedades de tu proyecto \Objeto Inicial y alli veras el subMain.
Porque haces?
BD.BeginTrans
BD.Execute sqlUsuario(txtusuario, txtcontrasena), adCmdText
BD.CommitTrans
No es necesario que hagas eso sino vas a mover registros. Cambialo por:
rs.Open sqlUsuario(txtusuario, txtcontrasena), dB, 1, 1
¿Porque recorres el recordset?
Basta con que hagas:
If rs!Usuario = txtusuario And rs!Contrasena = txtcontrasena Then 'aunque si ya te dio registro tampoco es necesario pq ya lo filtraste en el Select
MDIFormST.Show
Unload frmIniciarSesion 'matalo, para que lo mantiene en memoria con frmIniciarSesion.Hide
MsgBox ("Bienvenido (a) " & txtusuario & "")
Else
MsgBox ("Datos Incorrectos")
txtusuario.SetFocus
End If
Y porque pones en el Load del formulario
rs.Open sqlUsuario(txtusuario, txtcontrasena), BD, 2, 3
Si al hacer Load aun no has dado tiempo al usuario de escribir en txtUsuario y txtContrasema, eso esta demas.
Conclusión: modifica tu comando cmdEntrar
Private Sub cmdentrar_Click()
If txtusuario <> "" Then
If txtcontrasena <> "" Then
rs.Open sqlUsuario(txtusuario, txtcontrasena), dB, 1, 1 '<-- aqui ya compruebas si existe
if rs.RecordCount > 0 then
MDIFormST.Caption = "Hola " & rs!Usuario 'Si usas el nombre del usuario mejor pinta su nombre
MDIFormST.Show
Unload frmIniciarSesion
MsgBox ("Bienvenido (a) " & txtusuario) '<--- no es necesario que pongas al final & ""
Else
MsgBox ("Datos Incorrectos")
txtusuario.SetFocus
End If
Else: MsgBox ("Introduzca su Contraseña")
txtcontrasena.SetFocus
End If
Else: MsgBox ("Introsuzca su Nombre de Usuario")
txtusuario.SetFocus
End If
End Sub
Saludos
-
hice exactamente lo que escribiste y funciona PERFECTO.
GRACIAS!
[/b]
;D ;D