简体   繁体   中英

'UserRole' is not declared. It may be inaccessible due to its protection level

I am using VB.NET and microsoft access as my database, i am new to VB.NET and i tried to make different access levels depending on the current role.For example, After logging in, Admin will proceed to the main page And if users logs in, they will be directed to a different page. I have already set the different roles in my database, and i found some coding online to help me

However i keep getting the error 'UserRole' is not declared. It may be inaccessible due to its protection level. Do i need to declare UserRole first? if so, how do i do it? Any help would be much appreciated , thank you :)

Public Class Form1 Dim loginerror As String Dim UserRole As String Public Function login() Dim DBconn As New ADODB.Connection Dim user As New ADODB.Recordset

    Dim Username As String
    Dim userDB As String
    Dim passDB As String

    Dim UserFound As Boolean

    DBconn.Open("Provider = Microsoft.Jet.OLEDB.4.0;" & _
                "Data Source = '" & Application.StartupPath & "\LoginDB.mdb'")

    user.Open("UserTable", DBconn, ADODB.CursorTypeEnum.adOpenStatic, ADODB.LockTypeEnum.adLockOptimistic)

    UserFound = False
    login = False
    Username = "Username = '" & txtuser.Text & "'" '

    Do
        user.Find(Username)
        If user.BOF = False And user.EOF = False Then
            userDB = user.Fields("Username").Value.ToString

            passDB = user.Fields("Password").Value.ToString

            If userDB <> txtuser.Text Then
                user.MoveNext()
            Else
                UserFound = True
                If passDB = txtpass.Text Then
                    UserRole = user.Fields("roles").Value.ToString
                    user.Close()
                    DBconn.Close()
                    Return True
                Else
                    loginerror = "Invalid Password"
                    user.Close()
                    DBconn.Close()
                    Return False
                End If
            End If
        Else
            loginerror = "Invalid Username"
            user.Close()
            DBconn.Close()
            Return False
        End If
    Loop Until UserFound = True
    user.Close()
    DBconn.Close()
    Return False


End Function

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    If login() = True And UserRole = "admin" Then
        adminwelcome.Show()
        Me.Close()
    ElseIf login() = True Then
        Welcome.Show()
        Me.Close()
    Else
        MessageBox.Show(loginerror, "Login Message")
    End If
End Sub
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    AcceptButton = Button1
    Me.Show()
    Application.DoEvents()
    txtuser.Focus()
End Sub

Private Sub txtpass_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles txtpass.TextChanged

End Sub

Private Sub Label2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Label2.Click

End Sub

Private Sub txtuser_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles txtuser.TextChanged

End Sub

Private Sub Label1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Label1.Click

End Sub

Private Sub PictureBox1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles PictureBox1.Click

End Sub

Private Sub Label3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Label3.Click

End Sub

End Class

I'm assuming that you're pulling UserRole from the database. You're getting this error because that variable has not been declared yet.

I would pull that information (The user's role) and store it into a class-level variable named UserRole . Then, you'll be able to access it in the Button1_Click sub.

Public Class Form1
Dim loginerror As String
Dim UserRole As String
Public Function login()
Dim DBconn As New ADODB.Connection
Dim user As New ADODB.Recordset

Dim Username As String
Dim userDB As String
Dim passDB As String

Dim UserFound As Boolean

DBconn.Open("Provider = Microsoft.Jet.OLEDB.4.0;" & _
            "Data Source = '" & Application.StartupPath & "\LoginDB.mdb'")

user.Open("UserTable", DBconn, ADODB.CursorTypeEnum.adOpenStatic, ADODB.LockTypeEnum.adLockOptimistic)

UserFound = False
login = False
Username = "Username = '" & txtuser.Text & "'" '

Do
    user.Find(Username)
    If user.BOF = False And user.EOF = False Then
        userDB = user.Fields("Username").Value.ToString

        passDB = user.Fields("Password").Value.ToString

        If userDB <> txtuser.Text Then
            user.MoveNext()
        Else
            UserFound = True
            If passDB = txtpass.Text Then
                UserRole = user.Fields("UserRole").Value.ToString
                user.Close()
                DBconn.Close()
                Return True
            Else
                loginerror = "Invalid Password"
                user.Close()
                DBconn.Close()
                Return False
            End If
        End If
    Else
        loginerror = "Invalid Username"
        user.Close()
        DBconn.Close()
        Return False
    End If
Loop Until UserFound = True
user.Close()
DBconn.Close()
Return False


End Function

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)             Handles Button1.Click

If login() = True And UserRole = "admin" Then
    adminwelcome.Show()
    Me.Close()
ElseIf login() = True Then
    Welcome.Show()
    Me.Close()
Else
    MessageBox.Show(loginerror, "Login Message")
End If
End Sub
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
AcceptButton = Button1
Me.Show()
Application.DoEvents()
txtuser.Focus()
End Sub

Private Sub txtpass_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles txtpass.TextChanged

End Sub

Private Sub Label2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Label2.Click

End Sub

Private Sub txtuser_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles txtuser.TextChanged

End Sub

Private Sub Label1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Label1.Click

End Sub

Private Sub PictureBox1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles PictureBox1.Click

End Sub

Private Sub Label3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Label3.Click

End Sub

End Class

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM