Access表单ControlSource无效:文本框查询返回#Name?问题求助
解决Access文本框ControlSource中查询报错#Name?的问题
其实你把查询放在ControlSource里是完全可行的,只是你的语句存在小语法问题,才导致Access识别失败并显示#Name?。
问题根源与修正方案
你的子查询少了一个闭合的右括号,另外还要注意ID字段的数据类型:
- 如果
ID是文本类型,修正后的ControlSource语句:=(SELECT [QueryOne].[Company] FROM [QueryOne] WHERE [QueryOne].[ID] = "1000") - 如果
ID是数字类型,不需要给值加引号,修正语句:=(SELECT [QueryOne].[Company] FROM [QueryOne] WHERE [QueryOne].[ID] = 1000)
两种更稳妥的替代方案
如果觉得在ControlSource里写子查询不够直观,也可以试试这两种常用方法:
- 用DLookup函数获取单个值
这是Access中专门用来提取单条记录字段值的函数,语法更简洁,出错概率更低:
若=DLookUp("[Company]","[QueryOne]","[ID]='1000'")ID为数字类型,去掉引号即可:=DLookUp("[Company]","[QueryOne]","[ID]=1000") - 通过表单RecordSource绑定
先把表单的RecordSource设置为目标查询,再在表单加载时过滤记录:- 把文本框的ControlSource直接选择
Company字段 - 在表单的
Form_Load事件中添加VBA代码:Private Sub Form_Load() Me.RecordSource = "SELECT [Company] FROM [QueryOne] WHERE [ID] = 1000" End Sub
- 把文本框的ControlSource直接选择
总的来说,你的思路没问题,只是语句的小疏漏导致了报错,修正后就能正常显示内容了。
内容的提问来源于stack exchange,提问作者user7867367
相关产品推荐
相关产品推荐

