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

标签 mysql ms-access many-to-many subform

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”的记录。

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

最佳答案

好的,因此该行中的组合框使您可以选择一个给定的地址。您没有真正描述过,如果您有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号。

关于mysql - 如何在Access表单中以多对多关系填充第三个表? (MySQL后端),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58883803/

相关文章:

mysql - 插入多个MySQL外键时出错

php - 将数组添加到sql数据库中

mysql - DAO OpendataBase(DSN 对话框始终打开)

使用另一个表中的相同 ID 对列中的 SUM 值进行 SQL 查询

mysql - 为什么 symfony 对连接执行额外的查询

json - 休息API : how to post a manytomany relationship with fosrestbundle

mysql - MySQL自动生成临时密码后无法访问

javascript - 这个受密码保护的下载脚本安全吗?

excel - 使用 DoCmd.TransferSpreadsheet 将 Excel 电子表格导入 Access 会创建重复项

java - "Repeated column in mapping for collection"用于具有相同外键的 hibernate 多对多?