1

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

表 1 - 团队:

  • Team_ID(自动编号,主键)
  • 名称(短文本)

表 2 - 结果:

  • Game_ID(自动编号,主键)
  • Home_Team_ID(表 1 中的外键)
  • Away_Team_ID(表 1 中的外键)
  • Winning_Team_ID(表 1 中的外键)

我制作了一个表格,显示表 2 中的 Home/Away/Winning_Team_ID,但是我真的很难显示团队名称(来自表 1 的链接)。

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

记录源

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

问题是,当我尝试将现有字段“添加到表单的设计视图中然后保存”时,所有 3 个(主场、客场和获胜)都显示相同的值(主场值)。

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

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

(注:上两张图的区别是从"Teams_1.Name"右边变成"Teams.Name"

我不知道为什么,当我保存它时,它会自动更改为上述内容。如果我添加字段并且不保存而只是转到布局视图,它会完美运行,但是一旦我保存它,它会将所有字段更改为相同的字段。

4

1 回答 1

1

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

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

  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. 创建一个包含您希望在表单上显示的数据的已保存查询,然后将已保存查询指定为表单的记录源 - 使用此方法可避免为字段分配别名。

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

于 2019-07-07T15:30:10.377 回答