在我为 MS Access 2010 数据库创建的表单中,其中一个字段代表外键。我希望此字段显示为文本框,而不是像外键通常那样显示为组合框或列表框(主要原因是列表会变得太长且使用起来不方便,我宁愿让用户直接输入键)。但是,我无法让它工作,因此我可以直接在该文本框中输入外键。Access 似乎总是尝试创建一个新的另一个关系中的元组,当然会失败,因为已经存在具有相同键的元组(即我试图引用的元组)。
更实际地说,我遇到的问题是这样的:我的表中有一行 ID 为 100A.我想在表中创建新行乙,使用外键 100 来引用表中的该行A。表关系在 Access 中设置正确。如果我编辑表乙在电子表格视图中,我可以直接输入外键 100,一切都按我想要的方式运行。但是,如果我在表单上执行相同的操作,Access 会抱怨重复键,因为 Access 不会简单地将外键 100 存储在表中乙,它还试图创造一个完全新的表中现在重复 ID 为 100 的行A。我希望这或多或少是可以理解的。
我尝试将表 B 中的外键字段声明为组合查找字段,但除非我还将表单上的字段从文本更改为组合框,否则问题仍然存在。谷歌搜索还让我尝试将以下内容声明为表单上外键文本框的数据源:
=DlookUp("[ID]", "[TableA]", "[ID]=" & Forms![Form2]![txtID1])
但我只会得到一个语法错误。此外,Access 帮助文件只涵盖查找功能一直到 2007 版本——该功能是否在 Access 2010 中不再可用?
如何允许用户直接在表单的文本字段中输入外键,而无需 Access 尝试在引用的表中创建新行?如果我能让上面的数据源代码工作,它能解决我的问题吗?
答案1
好的。我明白你现在想做什么。根据你想要做什么,有两种选择。
选项 1:我认为这是更优雅的解决方案。创建一个将两个表连接在一起的查询。如果允许,新查询将可编辑,您可以提取表 A 中寻找的信息并直接放入文本框中。请参阅此网站以确定您的新查询为何可能是只读的。 http://allenbrowne.com/ser-61.html
选项 2:继续使用表单上的组合框,并创建一个将遮盖组合框向下箭头的图片。