在传统意义上的经典中,两个表之间确实没有多对多关系这样的事情,但是通过将相关表一个接一个地拼凑在一起,你最终会得到相同的结果多对多关系,但从技术上讲,这不是两个表之间发生的情况。实际上,您总是在从父表向下工作到子表。那些从连接表的角度思考的人实际上是在思考错误的方式。
如果允许一个人拥有许多最喜欢的颜色,那么将简单地将他们的多种颜色选择与可用颜色联系起来的表称为“连接”表是不合口味的。最好简单地说明我们需要一个名为:
My List Of Favorite colors table.
上表可能链接到其他表的事实是没有实际意义的。事实上,它可能有不止一列是外键,然后它就不是一个简单的联结表,但在当天它正在做同样的事情。
无论如何,在 Access 中,您肯定可以显示两个连续表单来显示以这种方式建模的数据。
假设每个周末我们都必须接受人们的大量捐款。这意味着我们有一个主表,其中包含有关此捐赠活动的日期和时间等信息。我们的下一张桌子会有人和他们的捐款金额。之后的下一个表格将是收取捐款金额,并将他们的资金分成不同的账户。这是一个经典的会计分配问题,几乎从 QuickBooks 到任何时候的每个会计软件包都必须实施。事实证明,在使用 access 时,只需很少的代码就可以解决这个经典的分发问题。
对这些类型的表单进行建模的技巧是将多个子表单放置在一个主表单中。
以下表格显示了这一点:
如果您查看顶部,则有一条主记录,其中包含有关此批次运行以及日期和时间的信息。现在,左边是很多人和捐款金额。右边是一个人的捐款分成许多不同的账户。所以我要显示很多人,我还要显示捐赠可能被分配到的许多帐户。
请记住,访问不允许您将连续子表单放置在连续子表单内。但是,您当然可以将两个连续的表单并排放置,如上面的屏幕截图所示,以模拟您想要的相同效果。
令人惊讶的是,上面提到的管理整个事情的代码很少。
对于左侧连续表单,由于链接主子设置设置为主表单记录,因此该表单无需代码即可填充数据。但是,对于右侧连续表单跟随并在左侧连续表单中显示每个人的正确会计数据,访问不会自动为您执行此操作。但是,左侧表单的当前事件中的一小段代码将强制访问唤醒并注意右侧继续表单必须重新填充以显示该特定人的捐赠帐户。
放置在左侧 on-current 事件中的一行代码将解决此问题:
me.Parent.Child2.Requery
我使用的右侧连续表单上的链接主/子设置:
linkChildFields main_id(该子表单中用于关联回父表的字段名称) LinkMasterFields [MasterFormLeftSide].[form].[ID](“masterFormleft”是您控制的子表单的名称用于保持左侧的连续形式)。
因此,您将需要一点点代码,但不需要大量代码,并且您现在拥有一个显示与许多信息相关的许多信息的屏幕。