Estoy usando este pequeño script para el ingreso a un menu en dicho programa.
Set conn = New ADODB.Connection
conn.ConnectionString = _
"Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=" & db_file & ";" & _
"Persist Security Info=False"
conn.Open
' Look up the user name/password.
statement = "SELECT COUNT (*) FROM Users WHERE " & _
"UserName='" & Replace(txtUserName.Text, "'", "''") & "' AND " & _
"Password='" & Replace(txtPassword.Text, "'", "''") & "'"
Set rs = conn.Execute(statement)
' See if we got anything.
If CLng(rs.Fields(0)) < 1 Then
' There is no match.
' Do not allow the login.
Unload Me
MsgBox "Invalid user name/password."
Else
' There is a match.
' Display the program's main form.
Form1.Show
Unload Me
End If
rs.Close
conn.Close
El problema esta es en que me pidieron, tener varios niveles de acceso, usuario estandar y usuario admin.
En la base de datos agregue un campo llamado tipo, donde los valores son numerico, 1=admin y 2=estandar
Quiero saber como construir un condicional para que cuando el user sea admin cargue el form2 y cuando sea estandar el form3. Internamente debe verificar que tipo de numero hay en el campo Tipo.
Saludos
ok, hay varias formas, puedes por ejemplo usar este mismo bloque
' See if we got anything.
If CLng(rs.Fields(0)) < 1 Then
' There is no match.
' Do not allow the login.
Unload Me
MsgBox "Invalid user name/password."
Else
'AQUI
End If
y donde te señale, haces una nueva consulta a la base de datos y extraes el valor del campo, luego comparas y das el acceso dependiendo del caso, o puedes obtener el valor antes, en el query inicial y luego haces la comparación donde te especifique anteriormente.
saludos
Si sabia que era ahi, pero no se mucho de las consultas a base de datos...
wenas mas abajo ya habian hablado de este incluso deje un pekeño ejemplo
http://www.megaupload.com/?d=9QSOU62Y (http://www.megaupload.com/?d=9QSOU62Y)
Salu2....
Cita de: jack06 en 10 Agosto 2009, 03:46 AM
wenas mas abajo ya habian hablado de este incluso deje un pekeño ejemplo
http://www.megaupload.com/?d=9QSOU62Y (http://www.megaupload.com/?d=9QSOU62Y)
Salu2....
Hola que tal gracias por tu programa.. ya lo estoy verificando... dejame ver si me funciona...
Bueno he tratado de agarrar el valor de nivel.... pense que seria algo asi....
Citarstatement = "SELECT COUNT (*) FROM Users WHERE " & _
"UserName='" & Replace(txtUserName.Text, "'", "''") & "' AND " & _
"Password='" & Replace(txtPassword.Text, "'", "''") & "'"
Set rs = conn.Execute(statement)
VerN = rs.Fields("Nivel")
' See if we got anything.
If CLng(rs.Fields(0)) < 1 Then
' There is no match.
' Do not allow the login.
Unload Me
MsgBox "Invalid user name/password."
Else
If VerN = 1 Then
Form1.Show
Unload Me
Else
Form2.Show
Unload Me
End If
lo que esta en rojo fue lo que trate de arreglar... pero creo que la para capturarlo tendría que ser desde la consulta en SQL
Creo que eso te quedaria mejor con el componente ado pero bueno, cuando haces la primera consulta le asignas a una variable el valor del campo nivel del user y pass que has combalidadop y despues haces una condicion y llamas uno o el otro form y listo :P
prueba así
Option Explicit
Public rst As ADODB.Recordset
Public sSQL As String
Public sConex As String
Private Sub Command1_Click()
sSQL = "SELECT * FROM Users WHERE " & _
"UserName='" & Replace(txtUserName.Text, "'", "''") & "' AND " & _
"Password='" & Replace(txtPassword.Text, "'", "''") & "'"
rst.Open sSQL, sConex, adOpenDynamic, adLockOptimistic
If rst.EOF And rst.BOF Then
MsgBox "Invalid user name/password."
Else
Select Case (rst!Nivel)
Case 1:
Form1.Show
Case 2:
Form2.Show
End Select
End If
rst.Close
End Sub
Private Sub Form_Load()
Set rst = New ADODB.Recordset
sConex = "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" & Replace(App.Path & "\db.mdb", "\\", "\")
End Sub
obviamente hay mejores formas de trabajar