Access VBA 如何将登录窗体的用户姓名变量传递到主菜单文本框
Access登录窗体向主菜单传递用户名的实现方案
原有代码失效的核心原因
- 赋值操作执行时
MainMenu窗体还未被打开,Access无法识别未加载的窗体控件,赋值自然不生效 - 不需要重复执行查询语句,身份验证通过时你已经通过
rst.Recordset拿到了用户姓名,直接复用该值即可,无需再拼接SQL字符串赋值给文本框
修正后的完整代码
'Login button submit, validate, welcome message & main menu navigation Private Sub cmd_login___Click() Dim db As DAO.Database Dim rst As DAO.Recordset Dim strSQL As String Dim userName As String ' 存储登录用户姓名的变量 'query to check if login details are correct strSQL = "SELECT Name FROM LoginQuery WHERE Username = """ & Me.txt_username.Value & """ AND Password = """ & Me.txt_password.Value & """" Set db = CurrentDb Set rst = db.OpenRecordset(strSQL) If rst.EOF Then MsgBox prompt:="Incorrect username/password. Try again.", buttons:=vbCritical, title:="Login Error" Me.txt_username.SetFocus Else ' 第一步:先拿到用户姓名,移除原有弹窗 userName = rst.Fields(0).Value ' 第二步:先打开主菜单窗体,必须先加载才能给控件赋值 DoCmd.OpenForm "MainMenu" ' 第三步:给主菜单的欢迎文本框赋值 Forms!MainMenu!txt_welcome.Value = "Hello, " & userName ' 第四步:最后关闭登录窗体 DoCmd.Close acForm, "frm_login", acSaveYes End If Set db = Nothing Set rst = Nothing End Sub
关键注意点
- 执行顺序不能乱:必须先打开主菜单窗体,再执行控件赋值操作
- 如果
txt_welcome文本框设置了锁定、只读属性,需要先取消勾选才能正常赋值显示 - 如果
MainMenu窗体的Load事件中有给txt_welcome赋值的代码,需要调整优先级或者删除冲突代码
内容的提问来源于stack exchange,提问作者Tom TK
相关产品推荐
相关产品推荐

