0

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

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

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

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

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

给出的输出是“欢迎”,用户名是“”,即使添加了行。现在,我通过实验也看到了这一点,当我在 access 数据库中手动添加一行时,该行的详细信息与将有问题地添加到数据库中的详细信息相同,程序运行良好。当然,任何帮助将不胜感激,并感谢您阅读这篇长文。

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

2 回答 2

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 避免了表单设计。

于 2013-08-29T10:02:24.693 回答
0

我的兄弟,而不是使用,

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

尝试

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

请让我知道这对你有没有用。

于 2013-08-30T05:59:37.313 回答