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

时间:2019-07-07 15:03:18

标签: ms-access ms-access-forms

我对Access来说还比较陌生,我正在努力为体育联赛建立一个数据库。我有2个表,如下所示:

表1-团队:

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

表2-结果:

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

我已经制作了一个表格,显示表2中的主场/客场/胜利队ID,但是我真的很难显示队名(通过表1的链接)。

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

Record Source

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

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

在保存之前-确实需要: Before Save

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

(注意:以上两张图片之间的区别是从右侧的"Teams_1.Name"更改为"Teams.Name"

我不知道为什么保存时它会自动变为以上内容。如果我添加字段但不保存而只是进入布局视图,则它可以正常工作,但是一旦保存,它将所有字段都更改为同一字段。

1 个答案:

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

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