如何在Access表单中以多对多关系填充第三个表? (MySQL后端)

Firstly,here is the relationship between the relevant tables.

我正在开发一个access前端,以充当基础MySQL数据库的CRUD,并且在大多数情况下,我都以正确的方式以多对多关系表示和与表进行交互。我遵循了this tutorial中的说明,并且我的表单大部分都可以正常运行。但是该教程示例受到限制,因为该关系中的第三个表(在我的情况下为Addresses)是静态的,并且不能从表单中进行更改。

Here's how my form looks currently.在people_has_addresses子表单中添加新条目时,如果我想通过在addresss_addressID列中输入其ID来添加地址表中已经存在的地址,则一切正常。其余的列将自动加载到地址中,people_has_addresses将使用PersonID和AddressID的这种唯一组合自动填充新行。当我想动态创建一个新地址,将其添加到“地址”表中,并使用此新组合填充people_has_addresses时,就会出现问题。如果我以自由格式在子窗体中键入新地址,然后按Enter键,则会出现以下错误:“ microsoft access数据库引擎无法在表“地址”中找到具有键匹配字段“ addresses_AddressID”的记录。

我的问题是,为了允许在地址中创建新行,我需要做什么?理想的工作方式如上所述。我觉得我快要做好这项工作了,但是不知道从这里开始该怎么做。

yyb4051 回答:如何在Access表单中以多对多关系填充第三个表? (MySQL后端)

好,因此该行中的组合框使您可以选择一个给定的地址。您没有真正描述过,如果您有10个地址,那么您想显示的那个地址会在邮件列表中显示,或者没有。您可以做的是在要推入(保存)地址ID的表中添加额外的列,并添加“默认”复选框。然后,您可以使用默认的Address列= true进行查询,以仅提取一个地址进行邮寄​​等。因此,在此示例中,我确实有一个复选框可以选择默认使用多个地址中的哪个。并且我们可以添加另一列用于房屋,公司,度假地点或其他内容。这样,您可以将地址分类为它的地址。

但是,问题和您的问题当然是如何添加新地址?

有很多方法可以做到这一点,就像冰淇淋的口味一样。换句话说,这取决于您的创造力。一种方法是在列表事件中不使用组合框。因此,如果您输入的地址ID不存在,则可能会提示您输入它。但是,用户在数据输入过程中永远不必看到,知道或使用一些愚蠢的“ id”。实际上,用户在使用该应用程序期间甚至都不应该看到PK或FK ID。

我建议您在允许您选择地址的组合框旁边放置一个按钮,以添加新地址。您可以使用+号之类的图形图像。因此,他们可以使用组合框选择现有地址,或单击+按钮添加新地址。按钮后面的代码将执行以下操作:启动表单以编辑地址,但是以添加模式启动表单。然后,当您关闭/保存表单时,该代码可能会/会在您刚刚添加到该地址的FK Address_ID列中的新地址的PK ID中进行填充。

出于残酷对待动物和您的使用者的利益?他们不需要知道或看到或键入一些“数字”。组合框可以隐藏第一个PK列。因此,当您选择一个给定的地址(在此示例中为酒店,但可能只是一个地址)时,您将显示名称。因此,代替扩展组合框的用户可以开始输入酒店名称。公平地说,使用地址,您实际上没有可键入的“名称”,因此您的情况有所不同。在大多数情况下,您选择的东西会带有一些名称或部件名称/编号,在我们的情况下是酒店名称。

请注意,子表单基于其他列中联接的查询。因此,当他们打开组合框时,实际上是在选择PK。就像魔术(没有代码)一样,城市,省,描述列也会从其他表格中自动显示。

所以表单看起来像这样: enter image description here

在上面,我们选择了几家酒店。但是,请注意有关使用哪个地址的复选框,因为我们可能有多个地址,但要打印一封信或信封,则该复选框将确定将显示哪个地址。

在上面,如果我们找不到或没有要使用的酒店(或地址),则可以单击组合框旁边的+号。这将启动一个不错的单一表单布局,以输入新的酒店(或地址)。如前所述,如何设置UI的工作方式很大程度上是一块开放的画布。一种获得想法的好方法是查看您使用的其他软件。那么,如何为Outlook用户添加多个地址?因此,存在关于您要如何执行此操作的方法和想法。它并不是真正的操作方式,而是您希望它如何工作,因为您可以根据自己的意愿设计此内容,使其在任何情况下都可以正常工作。

因此,此处不应公开PK ID。用户不在乎或不知道这些事情。我的意思是,当我键入此响应时,毫无疑问,导致堆栈溢出的SQL Server为该帖子生成了一个新编号-但这不是用户问题,只有开发人员需要关心。

好,所以我们构建该子表单。驱动该子表单的表只是

ID  (PK) 
Customer_ID   (FK to parent form driving this)
Hotel_ID      (FK to hotel - or in your case address)
DefaultAddress (true/false column)

并且如上所述,我们应该添加一个“更多”列,以将地址设置为要使用的默认地址。 例如:默认地址。

。由于左联接,所有其他列均显示。 (此子表单的左联接非常重要)。

现在,如果一家酒店不在我们的选择列表中,那么用户只需单击组合框旁边的+号,我们就会弹出一个不错的表格来编辑/添加新酒店。并请注意,当您使用Outlook,会计系统或几乎任何软件时?您不会看到并输入PK id值-开发人员只能真正地看到它,最终用户永远都不会看到或不必处理实际的PK编号。

本文链接:https://www.f2er.com/3092914.html

大家都在问