Access表单记录集值加载失败求助:从列表框填充子表单文本框
Access 表单赋值问题解决建议
你的核心问题是误用了DoCmd.OpenForm的Where参数——这个参数是用来筛选表单绑定数据源的记录,不是直接给文本框赋值的。如果6a_ContractQuote表单没有绑定到包含PrincNo和PrincName的数据源,这个条件完全不起作用。以下是具体修正方案:
修正步骤与代码
1. 正确的赋值逻辑
打开表单后,直接通过表单对象引用其文本框控件,把记录集里的值赋值过去。同时要注意记录集的有效性判断,避免空记录报错。
2. 修改后的完整代码
Dim Db As Database Dim rs6 As Recordset Dim PrincNo As String Dim PrincName As String Public Sub btn_LaunchContrQuote_Click() Set Db = CurrentDb ' 原SQL的GROUP BY多余,改用WHERE筛选单条记录更高效 Set rs6 = Db.OpenRecordset("SELECT [5_SUBMISSION].[5_SubmNo], [5_SUBMISSION].[5_SubmStatus], [5_SUBMISSION].[5_DateRecd], " & _ "[5_SUBMISSION].[3_PrincNo], [3_PRINCIPAL].[3_PrincName], [5_SUBMISSION].[2_AgcyNo], [2_AGENCY].[2_AgcyName], " & _ "[5_SUBMISSION].[1_ProducerNo], [1_PRODUCER].[1_Last Name], [1_PRODUCER].[1_First Name], [5_SUBMISSION].[4_ObligeeNo], " & _ "[4_OBLIGEE].[4_ObligName], [5_SUBMISSION].[5_ProjectDescription], [5_SUBMISSION].[5_ProjectCity], " & _ "[5_SUBMISSION].[5_ProjectState], [5_SUBMISSION].[5_Underwriter], [5_SUBMISSION].[4_AddtlObligee1], " & _ "[5_SUBMISSION].[4_AddtlObligee2], [5_SUBMISSION].[4_AddtlObligee3], [5_SUBMISSION].[4_AddtlObligee4] " & _ "FROM (((5_SUBMISSION INNER JOIN 2_AGENCY ON [5_SUBMISSION].[2_AgcyNo] = [2_AGENCY].[2_AgcyNo]) " & _ "INNER JOIN 3_PRINCIPAL ON [5_SUBMISSION].[3_PrincNo] = [3_PRINCIPAL].[3_PrincNo]) " & _ "INNER JOIN 4_OBLIGEE ON [5_SUBMISSION].[4_ObligeeNo] = [4_OBLIGEE].[4_ObligeeNo]) " & _ "INNER JOIN 1_PRODUCER ON ([5_SUBMISSION].[1_ProducerNo] = [1_PRODUCER].[1_ProducerNo]) " & _ "AND ([2_AGENCY].[2_AgcyNo] = [1_PRODUCER].[2_AgcyNo]) " & _ "WHERE [5_SUBMISSION].[5_SubmNo] = '" & Me.lst_SelectSubm & "';") ' 判断记录集是否有有效数据 If Not (rs6.BOF And rs6.EOF) Then rs6.MoveFirst ' 移至记录首行(原记录集仅单条记录) PrincNo = rs6.Fields(3).Value PrincName = rs6.Fields(4).Value ' 打开目标表单 DoCmd.OpenForm "6a_ContractQuote", acNormal ' 直接给表单文本框赋值 Forms("6a_ContractQuote").txt_PrincNo = PrincNo Forms("6a_ContractQuote").txt_PrincName = PrincName Else MsgBox "未找到选中的提交记录!" End If ' 清理对象释放内存 rs6.Close Set rs6 = Nothing Set Db = Nothing End Sub
关键改动说明
- 替换
GROUP BY + HAVING为WHERE:仅筛选单条记录时,GROUP BY完全多余,会降低查询效率。 - 增加记录集非空判断:避免选中无效项时触发运行时错误。
- 移除
OpenForm的Where参数:改为打开表单后直接赋值,这是给未绑定表单控件赋值的正确方式。 - 补充对象清理代码:手动关闭记录集、释放对象,避免Access内存泄漏。
额外注意事项
- 确认
6a_ContractQuote表单的文本框名称为txt_PrincNo和txt_PrincName,名称需完全匹配(大小写不敏感)。 - 若
5_SubmNo为数字类型,需去掉SQL语句中'" & Me.lst_SelectSubm & "'的单引号,改为" & Me.lst_SelectSubm & "。
内容的提问来源于stack exchange,提问作者BrianM
相关产品推荐
相关产品推荐

