You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Access VBA 如何将登录窗体的用户姓名变量传递到主菜单文本框

Access登录窗体向主菜单传递用户名的实现方案

原有代码失效的核心原因

  1. 赋值操作执行时MainMenu窗体还未被打开,Access无法识别未加载的窗体控件,赋值自然不生效
  2. 不需要重复执行查询语句,身份验证通过时你已经通过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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 12:54:04