我正在设计一个Access 2010 Web数据库,我正在尝试创建一个基于连接表显示数据的子表单。它显示正常,但我无法修改数据。这两个表称为Consortiums和PrincipleInvestigators。它们之间有多对多的链接,所以我有一个ConsortiumsPrincipleInvestigators连接表。
我有一个“联合体”表格,显示与特定财团相关的数据,并在该表格中有一个子表格,显示该联合体的主要调查员部分。我能够成功地完成所有PI,但是当我尝试在该子表单中添加一个主要调查员时,它给了我一个错误:“无法添加记录;表'PrincipleInvestigatorsConsortiums'表的连接键不在记录集中。是什么给出的?我想这是因为我需要更新PrincipleInvestigators表和连接表。(另外,MS,为什么我不能只使用标准的关系数据库而不是这个愚蠢的查找字段业务?)这里是我的表格布局的一些截图我的联系表:
的Bleh。虽然我已经完成了相当数量的数据库项目,但我感觉很自然,但是查找字段和查询构建器让我失望。有没有人知道有关如何设计查询的任何好教程?
答案 0 :(得分:2)
在构建两个表之间的关系方面,实际上没有任何变化。您使用GUI,SQL DLL命令或现在某些关系向导的事实不会改变任何内容。
我的意思是谁关心在两个表之间建立关系的过程是什么?
我的意思是,在基于客户端的情况下,您可以键入以下内容:
ALTER TABLE Cars
ADD CONSTRAINT MyColorIDRelationship
FOREIGN KEY (ColorID) REFERENCES Colors (ColorID)
所以,现在你使用一些只需点击几下鼠标的向导,这是一个大问题?真的,谁在乎!这里没有什么大的,我们所关心的只是你执行一些命令,或者某个向导,或者其他什么东西,而你在一天结束时,结果就是你们两个表之间心爱的关系。
查看我的以下视频,其中我将一些现有相关数据“挂钩”到网络数据库中。我还分享了如何使用Web数据库的Access关系窗口打印出相关表格:
http://www.youtube.com/playlist?list=PL27E956A1537FE1C5&feature=plcp
因此,在一天结束时,无需在必须使用某些DDL sql命令,某些GUI关系窗口或某些向导的某些细节上加以扭曲。正如上面的视频节目所做的那样,你正在连接一些表并建立关系 - 仅此而已,不用担心。
至于如何添加与父记录相关的子记录?好吧,在过去18年的过去,使用Access的每一只鸟,狗和甲虫都会这样做:
a)根据ONE主要父记录表创建一个主表单。这里没有必要构建查询,实际上不需要构建一个两个表的连接的查询 - 这从来不是必需的,也不是必需的。您所做的只是基于一个简单的表构建表单。我们完成了这部分“a”。
b)基于ONE子表创建表单。这里不需要构建查询,实际上不需要构建一个两个表的连接的查询 - 这从来不是必需的,也不是必需的。您所要做的就是基于一个简单的表格构建表单。
c)打开第一个表单(基于父记录表的表单),然后在布局模式下,现在从导航窗格中拖放子表单。
以上a,b,c步骤是我在Access中看到的几乎所有父级到子级设置的完成情况,并且这很长时间永远设置为在基于Web的应用程序中100%工作。
在这两种情况下(网络或非网络),设置保持不变,设置不涉及构建要求,并且设置不需要您进行任何编码。
只要子窗体控件中的链接/主子设置正确,您就可以自由地将子记录添加到子窗体中,Access将完成设置和维护关系的其余脏工作。您可以为您设置该子表单中的FK列。
因此,基本设置在这里工作的方式在使用Access的18年中没有改变,因此在此处构建Web表单时这不会改变。
您不需要基于多个表的查询,实际上就像过去一样,这两个表单作为一般规则将使其数据源仅基于一个表。
因此,在大多数情况下,甚至不需要对表单将要基于的那个表使用查询。对于Web表单,这种长时间的基本方法和设置也没有改变。
在你的情况下,我认为主要形式是Consortium。您的子表单可以是基于Principleinvegiartors的继续表单。而不必手动输入一些PrincipleInvetigaor ID,您使用基于表PrincipleInvetgioars的组合框。但是,在所有情况下,我们只是构建基于单个基表的表单。
答案 1 :(得分:0)
对于这种情况,您应该为主窗体选择一个表,为子窗体选择连接表。
例如:
Main Table
Consortiums
Subform
ConsortiumsPrincipleInvestigators
Link Child and Master Fields ConsortiumID
ComboBox on subform
Principal investors
Row source: SELECT InvestorID, InvestorDetails FROM PrincipalInvestors
Control Source: InvestorID
Bound Column: 1
Column Count: 2
Column Widths: 0,2
关于不在列表中的一些注释
DoCmd.OpenForm "AddSomething", , , , , acDialog, AddData
If Forms!AddSomething.Tag <> "" Then
frm(cbo).Undo
frm(cbo).Requery
frm(cbo) = Forms!AddSomething.Tag
AddCombo = acDataErrAdded
Else
AddCombo = acDataErrContinue
End If
DoCmd.Close acForm, "AddSomething"