MS Access 组合框“#Name?”错误

Posted

技术标签:

【中文标题】MS Access 组合框“#Name?”错误【英文标题】:MS Access Combobox "#Name?" error 【发布时间】:2017-01-17 11:05:58 【问题描述】:

我对表单中的组合框有疑问,它显示“#Name?”每当我输入它以选择一个值时都会出错。

我正在 MS Access(特别是 Microsoft Office Professional Plus 2010)中创建一个作为通用用户界面的表单,这意味着表单本身未链接到任何类型的 RecordSet。 在该表单中,我创建了一个组合框,我将它链接到一个“TblSubsystem”表。该表非常简单,设计如下:

ID(主键、自动编号) SysShortName,文本 系统全名,文本

当我尝试在下拉列表中选择一个值时,组合框的测试框只显示“#Name?” (实际上只要我选择了组合框,甚至在我选择任何值之前)

组合框的相关(我认为)参数是:

控制源 = "=[TblSubsytem]![ID]" 行源 = TblSubsystem 行源类型= 表/查询 绑定列= 2 列数= 2 列宽= 0cm;1cm (我正在尝试选择并显示短代码,但要获取 ID 作为组合框的值)

我在同一个项目中有另一个表单,其中相同的设置(也在 TblSubsystem 上)工作得很好,这些参数的值相同,但该表单链接到 RecordSet(另一个表)。据我所知,这是唯一的区别,所以我想我一定是错过了一些东西,一旦我看到它就会很明显......

我已经在 *** 和更广泛的网络上寻找“Ms Access combobox #Name?Error”的变体,但两天后,我没有看到任何帖子回答我的问题。有些很接近,但指的是更复杂的设置,而我认为我的设置应该非常简单。尝试使解决方案适应我的情况(包括重新创建组合框或反编译数据库)没有帮助。

这是一个很长的问题,对此感到抱歉,但希望足够准确,以便你们中的一些人提供帮助。在此先感谢您提供的任何帮助。

【问题讨论】:

【参考方案1】:

#Name 是一个绑定问题。尝试将您的绑定列设置为 1,这样它只会记录您的主键并查看是否有效。

编辑:您的组合框将表的主键引用为您的控制源。请记住,控制源是应用程序用户正在更改的值。以下是使用组合框时需要考虑的一些关键事项:

控制源应该(通常)引用表的外键 行源应引用您希望在框中显示的文本 绑定列应设置为 1,除非您的应用程序设计要求您同时更新两个字段,这是一种不常见的做法。 将列宽设置为 0;1。这将隐藏行源中的第一个字段,这应该是您的外键

示例如下所示: 控制来源:EmployeeID --123456 行源:EmployeeID、EmployeeName --123456 | John Doe

设置为1 的绑定列将记录值1234556。绑定列设置为 2 将记录 123456, John Doe

【讨论】:

嗨,史蒂夫。感谢您的回答。不幸的是,当我尝试这样做时,错误没有出现,但组合框保持空白,就像我没有选择任何东西一样 哦,它就像货运列车一样击中了我!您已将控制源作为主键字段。选择某些内容后,组合框保持空白,因为应用程序认为您正在尝试更改自动生成的主键字段。这是不允许的,因此将其保留为空白。您将需要回顾应用程序的设计,以了解您应该更改的适当字段是什么。组合框通常适用于引用外键,我认为您正在这里寻找。 嗨史蒂夫。的确,你是绝对正确的。这是一个新手设计错误:我的问题是我根本不想更改表格,所以现在我只是在表单加载时发出一次性请求以获取值列表,我将其静态设置为我的组合框列表的来源。然后,当我更改组合框时,我使用另一个请求来隔离所选记录的主键值。问题解决了。谢谢。 更准确地说,组合框的 Row Source 现在是请求“SELECT SysShortName FROM TblSubsystem”,而 Control Source 为空。它就是这样工作的。

以上是关于MS Access 组合框“#Name?”错误的主要内容,如果未能解决你的问题,请参考以下文章

MS Access:组合框列顺序问题

MS Access:为啥我的组合框显示错误的值?

MS Access 2010 多列组合框自动完成

使用按钮从组合框中将值传递给文本框单击 MS ACCESS

MS Access - 构建一个组合框,该组合框根据先前的组合框选择返回多个值

MS ACCESS 过滤器组合框所有选项