如何在指定窗体DataGrid中仅显示登录用户所需数据库信息
解决登录后DataGrid仅显示当前用户指定信息的问题
看你的现有代码,主要有两个核心问题导致没法实现需求:一是登录成功后没有持久化当前用户的身份,导致另一个窗体拿不到正确的用户名;二是用了select *会返回所有字段,没法做到只展示所需信息。我给你一步步调整:
第一步:在登录窗体保存当前登录用户的信息
先在登录窗体的通用声明区(代码窗口最顶部,所有过程外面)定义一个全局变量,用来存当前登录的用户名:
Public CurrentUserName As String
然后修改登录按钮的代码,在登录成功时把用户名存入这个变量:
Private Sub loginbtn_Click() Adodc1.RecordSource = "select * from STUDENTINFO where Name = '" + txtuser.Text + "'" Adodc1.Refresh If (Adodc1.Recordset.EOF = False) Then If (txtpass.Text = Adodc1.Recordset.Fields("ID")) Then MsgBox "Login Succeeded!" ' 保存当前登录的用户名到全局变量 CurrentUserName = txtuser.Text ' 打开学生信息窗体 StudentInfo.Show Else MsgBox "Invalid Password!", vbCritical, "Login" txtuser.Text = "" txtpass.Text = "" txtuser.SetFocus End If Else MsgBox "Invalid Username or Password!", vbCritical, "Login" txtuser.Text = "" txtpass.Text = "" txtuser.SetFocus End If End Sub
第二步:修改StudentInfo窗体,加载指定字段的用户信息
你原来的DataGrid点击事件逻辑不太合理——用户打开窗体应该直接看到自己的信息,不用点击表格。我们把逻辑移到Form_Load事件里,并且明确指定要显示的字段(比如你需要姓名、学号、专业,就把这些字段列出来,不要用select *):
Private Sub Form_Load() ' 只查询你需要的字段,把Name、ID、Major换成你实际要展示的字段 Adodc1.RecordSource = "SELECT Name, ID, Major FROM STUDENTINFO WHERE Name = '" + LoginForm.CurrentUserName + "'" Adodc1.Refresh ' 可选:给DataGrid的列设置友好的标题 DataGrid1.Columns(0).Caption = "姓名" DataGrid1.Columns(1).Caption = "学号" DataGrid1.Columns(2).Caption = "专业" End Sub
另外,你原来的DataGrid_Click事件可以删掉,因为现在打开窗体就自动加载数据了。
为什么这么改?
- 全局变量
CurrentUserName能可靠传递登录用户的身份,避免依赖登录窗体的txtuser控件(毕竟登录成功后你清空了控件内容,而且窗体可能被隐藏) - 用
SELECT 字段1,字段2代替SELECT *,能精准控制DataGrid显示的内容,完全符合“仅显示所需信息”的要求 - 把数据加载逻辑放在
Form_Load里,用户打开窗体就能看到自己的信息,体验更流畅
内容的提问来源于stack exchange,提问作者Iskandar Siraj
相关产品推荐
相关产品推荐

