在Visual Basic中选择命令不能正常工作

时间:2013-08-29 09:54:29

标签: vb.net visual-studio vba ms-access

我是Visual Basic for Applications的新手。我的当前程序中有一个登录系统。您将通过阅读以下内容了解该系统。我有一个Access数据库,其表格如下所示: -

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

表格被清除,表格关闭时删除了所有内容。现在,当用户登录时,会添加一行: -

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

现在,用户以index.vb的形式输入他的id和密码,并且在index.vb文件中也有用于在access数据库中添加行的命令。添加行后,将隐藏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()

给出的输出是“Welcome”,即使添加了行,Username也是“”。现在,我也通过试验看到了这一点,当我在访问数据库中手动添加一行时,会在数据库中添加相同的详细信息,但程序运行正常。当然,任何帮助都将受到赞赏,并感谢您阅读这篇长篇文章。

更新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()

2 个答案:

答案 0 :(得分:1)

您说Access在手动刷新Access文件(数据库)后显示行。有时您需要在插入后重新查询()数据库。我在使用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来避免表单设计。

答案 1 :(得分:0)

我的兄弟而不是使用,

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

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

让我知道它是否适合你。