2011-11-02 65 views
1

我正在使用我的第一个Access 2010数据库,并遇到编辑从查询返回的记录集的问题。 This excellent blog entry详细说明了可能导致不可编辑的查询结果的几种情况。我相信我的查询结果不可编辑,因为我的查询具有笛卡尔联接。MS Access 2010:如何避免不可编辑的查询结果?

但是我不确定如何避免这种情况。所涉及的三个表是:

  • 发作
    • 个别电视剧集
    • 主键: “episode_id”
  • aridates
    • 对于给定的插曲个人airdates
    • 小学键:“airdate_id”
    • 相关的 “情节”,由 “airdate_episode_id”
  • startdates
    • 单独下载,startdates对于给定的插曲
      • 即当一个特定的场景将可以下载
    • 主键:“startdate_id”
    • 通过“startdate_episode_id”与“episodes”相关联

所以,没有(和我认为可以没有)airdates和startdates之间的直接关系。然而,这使得查询:

SELECT episodes.episode_id, episodes.episode_number, episodes.episode_title, airdates.airdate_region_id, airdates.airdate_date 
FROM (episodes LEFT JOIN airdates ON episodes.episode_id = airdates.airdate_episode_id) LEFT JOIN startdates ON episodes.episode_id = startdates.startdate_episode_id;

返回一个记录是不可编辑。我需要能够看到剧集名称和编号以及airdate才能输入开始日期(在播出之前无法下载剧集)。所以基本上,在这个视图中,我只需要能够编辑“startdates.stardate_date”。

在此先感谢您的任何建议......关系问题can be seen here的屏幕截图。

回答

2

创建此查询:

SELECT 
    episodes.episode_id, 
    episodes.episode_number, 
    episodes.episode_title, 
    airdates.airdate_region_id, 
    airdates.airdate_date 
FROM 
    episodes LEFT JOIN airdates 
    ON episodes.episode_id = airdates.airdate_episode_id; 

用它作为记录来源的一种新形式。然后创建另一个只使用startdates表的查询作为其记录源的表单。

将第二个窗体添加为第一个窗体的子窗体。在子表单控件的属性页上,设置链接主字段episode_id和链接子字段startdate_episode_id。

如果成功,子窗体将显示startdate行,其中startdate_episode_id与主窗体的当前记录的episode_id匹配。如果在子窗体中添加新行,其startdate_episode_id将从主窗体“继承”episode_id。

我之前强调过控制,因为这一点可能会令人困惑。子窗体控件是主窗体的控件集合的成员,并且子窗体控件包含子窗体。您必须在子窗体控件上找到链接主/子字段属性,而不是实际的子窗体本身。

+0

谢谢汉斯!这样做的诀窍......我需要充分利用表格的格式,使其尽可能地变得可用,但这绝对是我需要的。 – boybert