2016-01-21 58 views
0

我的vb.net代码有问题,我有一个连接到mysql数据库的登录表单。它可以检查用户是否在数据库中,现在接下来要做的是根据登录帐户从数据库中获取名称,访问级别和userId,我将它存储在一个包含全局变量的模块中。变量不会在vb.net中更新

这是我的代码。

Module pubvars 
    Public Gplev As String 
    Public Gname As String 
    Public GuserId As Integer 
End Module 

然后,我将使用这个变量上的其他形式,在变量记录的第一届会议正确地读出,但是当我退出,然后用新的用户帐户登录,传递的变量没有更新,这被认为是在一个新帐户登录时更改的。

这里是我声明变量的代码。

Dim search1 As MySqlCommand = New MySqlCommand("SELECT * FROM `login` WHERE login.username = '" & TextBox1.Text & "' AND login.password = '" & TextBox2.Text & "'", con) 
con.Open() 
Dim dr As MySqlDataReader = search1.ExecuteReader 
Dim userFound As Boolean = False 

While dr.Read 
    userFound = True 
    pubvars.Gname = dr("name").ToString 
    pubvars.Gplev = dr("permission_level").ToString 
    pubvars.GuserId = dr("userId").ToString 
End While 

If userFound = True Then 
    main_menu.Show() 
    Me.Hide() 
Else 
    MsgBox("Sorry, username or password not found", MsgBoxStyle.OkOnly, "Invalid Login") 
    TextBox1.Text = "" 
    TextBox2.Text = "" 
End If 

这里是我在第二种形式使用变量的代码。

Private Sub main_menu_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load 
    Label3.Text = pubvars.Gname 
    If pubvars.Gplev = "2" Then 
     Button8.Enabled = False 
     Button8.Visible = False 
    ElseIf pubvars.Gplev = "3" Then 
     Button8.Enabled = False 
     Button8.Visible = False 
    ElseIf pubvars.Gplev = "4" Then 
     Button8.Enabled = False 
     Button8.Visible = False 
    End If 
End Sub 

对于注销我有以下code.Is这个权利或它是不够的退出?

Private Sub Button7_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button7.Click 
    pubvars.Gname = "" 
    pubvars.Gplev = "0" 
    login.Show() 
    Me.Hide() 
End Sub 
+0

您是否在找到用户,进入第二个窗体,然后pubvars不再存储您的值? –

+0

@Mort pubvars不再通过在不同帐户上登录后将值传递给第2个窗体,或者标签3显示puvars中的值没有显示值。类似的事情发生了。 –

+0

看起来应该可以工作。设置一个断点并一步一步确保代码为新登录运行 – Plutonix

回答

0

将登录变量赋值逻辑从Load事件移到Activated事件。 Load事件只会在第一次加载Form时执行一次。

每当您显示表单.Show()时,激活的事件就会发生。如果您将代码从Load事件移到Activated,您应该修复这个问题。