2013-08-29 114 views
0

我是Visual Basic for Applications的新手。我目前的程序中有一個登錄系統。您將通過閱讀以下內容瞭解該系統。我有一個Access數據庫,其表看起來像以下: -在Visual Basic中選擇命令無法正常工作

Name : Cookies 
---------------------------- 
ID  | Nme | Val | 
---------------------------- 

表被清除,並且它的所有內容,當窗體關閉時刪除。現在,當,一排用戶的跡象增加: -

---------------------------- 
(id) | "user" | username | 
---------------------------- 

現在,用戶輸入他的形式index.vb和命令ID和密碼,添加行中訪問數據庫也有在index.vb文件中。行添加後,index.vb文件被隱藏,並顯示文件userpage.vb。現在,我已經看到,當用戶登錄時,該行會正確添加到訪問文件中(通過手動刷新訪問文件),並且在關閉窗口時,表格中的所有內容都會正確刪除。所以,插入和刪除行沒有問題。顯然,問題出在顯示部分。我顯示的用戶名是如下代碼(代碼是在userpage.vb文件): -

Dim Username As String = "" 
Dim Conn As New OleDb.OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Software\db.accdb") 
Conn.Open() 

Dim Cmd As New OleDb.OleDbCommand("Select Val From Cookies Where Nme='user'", Conn) 
Dim Reader = Cmd.ExecuteReader 
Do While Reader.Read 
    Username = Reader.Item("Val") 
Loop 
Label1.Text = "Welcome " & Username 
Conn.Close() 

所給出的輸出是「歡迎」和用戶名是「」,即使已經添加的行。現在,我也通過實驗看到了這一點,當我在訪問數據庫中手動添加一行時,將會在數據庫中添加相同的細節時出現問題,該程序可以正常工作。任何幫助,當然,將不勝感激,並感謝您閱讀這篇長篇文章。

更新1(由@Dimple的建議) 我插入的代碼如下(此代碼是在index.vb頁): -

Dim usernameinput As String = TextBox1.Text 
    Dim Cmmd As New OleDb.OleDbCommand() 
    Cmmd.Connection = Conn 

    Cmmd.CommandText = "INSERT INTO Cookies (Nme, Val) Values('user','" & usernameinput & "')" 
    Cmmd.ExecuteNonQuery() 

    Dim Userpage As New User_page 
    Me.Hide() 

    Userpage.Show() 
+0

難道問題是在你的select命令中你有'用戶'硬編碼?你不應該把它作爲一個變量嗎? (或者更好的,一個避免SQL注入的參數)。 – APrough

回答

1

你說,Access顯示一行之後手動刷新Access文件(數據庫)。有時你需要在插入後重新安裝Requery()。在使用Access時遇到此問題。

Form1 

    Public Class Form1 

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click 
     Dim Conn As New OleDb.OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=D:\db.accdb") 

     Conn.Open() 
     Dim usernameinput As String = "TextBox3.Text" 
     Dim Cmmd As New OleDb.OleDbCommand() 
     Cmmd.Connection = Conn 

     Cmmd.CommandText = "INSERT INTO Cookies (Nme, Val) Values('user','" & usernameinput & "')" 
     Cmmd.ExecuteNonQuery() 
     Conn.Close() 
     Me.Hide() 
     Form2.Show() 
    End Sub 
End Class 


Form2 

    Public Class Form1 

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click 
     Dim Conn As New OleDb.OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=D:\db.accdb") 

     Conn.Open() 
     Dim usernameinput As String = "TextBox3.Text" 
     Dim Cmmd As New OleDb.OleDbCommand() 
     Cmmd.Connection = Conn 

     Cmmd.CommandText = "INSERT INTO Cookies (Nme, Val) Values('user','" & usernameinput & "')" 
     Cmmd.ExecuteNonQuery() 
     Conn.Close() 
     Me.Hide() 
     Form2.Show() 
    End Sub 
End Class 

我甚至沒有改變你命名的變量。只是避免使用msgbox進行設計。

+0

Ok..w8一段時間。我正在更新我的問題 – h2O

+0

請檢查更新的問題 – h2O

+0

您是否在執行操作時保持Access數據庫處於打開狀態?嘗試使用Access數據庫關閉執行您的代碼。我會在這裏實現你的代碼,看看是否還有其他問題。 – Dimple

0

我的哥哥,而不是使用,

Do While Reader.Read 
    Username = Reader.Item("Val") 
Loop 

嘗試

Do While Reader.Read = True 
    Username = Reader.Item(0) 
Loop 

讓我知道它是否適合你。