2016-01-21 56 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,您應該修復這個問題。