我正在开发基于Microsoft Access 2013的信息系统。 客户的要求之一是通过使用具有可用值的组合框来简化数据输入过程。
例如,客户端要求让用户从组合框中选择代理名称,而不是输入agentID
,与其他类似字段的逻辑相同。
简而言之:
我需要尽可能避免输入值ID,并让用户从组合框中选择它们。
Microsoft Access具有内置的查找向导,允许用户将表字段与另一个表中的特定字段绑定,例如通过查找向导将cityID
的{{1}}与tblVoyage
/ tblCities
相关联,让用户从组合框中选择城市,而不是在字段中输入特定的城市ID。
一切看起来都很棒,但有一个令人困惑的时刻。 在数据库课程中,我了解到,为了构建数据库并使用它,我们必须定义表之间的关系(1:1,1:M,M:N),但如果我这样做,我就无法使用查找向导,因为我已经定义了表之间的关系。因此,用户必须手动键入所有ID,而不是从组合框中选择它们。
所以,我想:
答案 0 :(得分:7)
这里的普遍共识似乎是应该避免使用Lookup字段。它们实际上只是拥有“正确”查找表的捷径,它们隐藏了表级别的实际情况。例如,假设您有[Size]的Lookup字段,其值为'Small','Medium'和'Large'。当您查看表格时,您会看到单词,但表格确实包含数字(如1,2和3)的可能性很大。您可以访问
UPDATE tblName SET Size="Large"
并且查询失败,因为它实际上需要做的是
UPDATE tblName SET Size=3
(当您维护一个“正确”的单独查找表时,主表中的字段会显示字段中实际的内容:查找表中所选项目的PK值。您仍然可以设计表单以使查找表填充一个组合框并绑定到主表中的字段。)
更令人困惑的是,查找向导提供了“允许多个选择”选项,因此字段可以包含多个值(排序)。这显然已添加,因此Access可以更好地与SharePoint一起工作,而这恰好是应该使用该功能的唯一时间。在绝大多数其他情况下,最好显式维护一个单独的子表来存储多个选择。
组合框向导将指导您完成将组合框链接到其记录源(查找表)并将其值绑定到数据表中的字段的过程。例如,假设您已经为[Agents]
设置了查找表ID AgentName
-- ---------
1 Gord
2 Angie
...和[帐户]
的数据表ID agentID AccountName
-- ------- -----------
您使用[帐户]表作为其Record Source
创建新表单。当您向表单添加组合框时,向导应该运行并询问您“您希望组合框如何获取其值?”。您选择“我希望组合框从另一个表或查询中获取值。”
在下一步中,您选择[Agents]表:
接下来,告诉向导您要显示[AgentName]:
选择排序顺序(如果需要)后,您可以确认列宽。保持“隐藏键列(推荐)”。
最后,您可以选择复选框值的变化。您可以将它“绑定”到[Accounts]表中的[agentID]字段:
请注意,组合框会显示[agentName]
供用户选择,但其.Value
将是数字[Agents].[ID]
,这将存储在{{1}中}}