为什么我的访问表单在保存时会更改我的字段?

Why is my Access Form Changing my Fields when I save it?

我对 Access 比较陌生,我正在为一个体育联盟构建一个数据库。我有 2 个表格,如下所示:

Table 1 - 团队:

Table 2 - 结果:

我制作了一个表格来显示来自 Table 的 Home/Away/Winning_Team_ID 2 但是我真的很难显示团队名称(从 link 到 Table 1).

在表单的记录源中,我 linked Table 2 到 Table 1 的三个副本,然后 linked 主键的从三个 Table 1 到外键 (Home/Away/Winning_Team_ID's) 到 Table 2,如下所示。

这为我提供了查看此查询的结果时所需的确切数据。

问题是,当我尝试 "Add Existing Fields" 进入表单的设计视图然后保存时,所有 3 个(主场、客场和获胜)都显示相同的值(主场值)。

保存之前 - 正是我需要的:

保存后 - 右侧的字段已更改:

(注:上面2张图的区别是右边的"Teams_1.Name"变成了"Teams.Name")

不知道为什么,我保存的时候,自动变成了上面的样子。如果我添加字段但不保存而只是转到布局视图,它会完美运行,但一旦我保存它,它会将所有字段更改为相同的字段。

出现这个问题的原因是因为这三个字段在构成表单记录源的SQL代码中具有相同的字段名称(尽管table限定符不同),所以当MS Access 验证窗体上每个控件的控件源,它忽略 table 限定符并分配记录源中具有匹配字段名称的第一个字段。

有两种方法可以解决这个问题:

  1. 为表单的记录源中的另外两个 Name 字段指定一个别名,例如:

    select 
        Teams.Name as Home_Team, 
        Teams_1.Name as Away_Team, 
        Teams_2.Name as Winning_Team 
    from 
        (
            (
                Results left join Teams on
                Results.Home_Team_ID = Teams.Team_ID
            )
            left join Teams as Teams_1 on 
            Results.Away_Team_ID = Teams_1.Team_ID
        )
        left join Teams as Teams_2 on
        Results.Winning_Team_ID = Teams_2.Team_ID
    
  2. 创建一个保存的查询,其中包含您希望在表单上显示的数据,然后将保存的查询指定为表单的记录源 - 使用此方法可以避免将别名分配给字段。

就我个人而言,我建议使用上述第一种方法,因为窗体上控件的控件源将更具描述性并且更易于维护。