ms-access - 对于相对复杂的多对多关系(比大多数示例更复杂),我想限制我可以在表单中输入的内容
问题描述
首先:我正在使用 Access 2016
我的基本设置如下:
- 客户(带有姓名和业务相关信息等)
- 联系人(联系人信息,每个联系人属于一个客户)
- CustomerSite(地址等,每个站点属于一个客户)
- 设施(设施相关信息,每个设施属于ONE CustomerSite)
这些关系是使用客户/站点 ID 的外键实现的。这工作得很好。
但是,我还想要的是以下内容:
许多联系人可以负责许多站点和/或许多设施。
因此,我制作了以下联结表:
- ContactsCustomerSite(Contact-ID 和 Site-ID 的外键)
- ContactsFacility(Contact-ID 和 Facility-ID 的外键)
只要我小心地将数据手动输入到联结表中,这就会起作用。
但是,我想提供表格以将联系人分配给站点/设施,这就是我遇到问题的地方。
到目前为止,我尝试了一些自定义的自动生成表单。它们显示例如设施信息,然后在数据表子表单中显示相关联系人(带有联系详细信息表单的链接)。
但是,数据表没有受到适当的限制。我可以在那里输入新联系人,但有几个问题:
- 我在那里输入的联系人成为新联系人
- 我必须手动选择联系人所属的客户,这是错误的来源(例如,可以输入不同客户的联系人作为负责人)
我只想从属于同一客户的现有联系人中进行选择。
我怎样才能做到这一点?
我真的不知道什么样的表格适合输入这个,我也不太明白“表面之下”的访问是什么:(
解决方案
我会使用未绑定的组合框来添加新的站点和设施联系人。限制组合框仅显示具有匹配 CustomerID 的联系人。
对于您的站点表单,使用您当前的设置,但将子数据表设置为 AllowAdditions = False。在表单上放置一个未绑定的联系人选择组合框。在组合框旁边放置一个 [添加联系人] 按钮。单击[添加联系人]时,使用 VBA 在 ContactsCustomerSite 表中创建记录。重新查询子数据表以显示新记录。
在 Facility 表单上执行相同的操作。
推荐阅读
- okta - 使用 Okta 进行保险柜身份验证
- php - apache 的 CORS 问题
- ssl - 带有 https 的码头服务器
- python - 以不同方式对相似数据进行正则表达式并填充数据框
- graphql - Graphql 服务器端如何使用模式
- sql - 在 Oracle 11g SQL 中,是否有更新列的优先顺序?
- sql-server - Excel VBA 到 SQL Server 2016 连接字符串错误
- javascript - 如何在 Wordpress Rest API 中显示菜单页面子项?
- javascript - 4sum如何通过测试用例
- python - 删除非 ASCII 字符