我是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()
答案 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
让我知道它是否适合你。