MS Access - 基于相同表格但不同记录的表单和子表单

时间:2016-04-21 08:53:29

标签: sql-server ms-access foreign-keys relationship subform

我有一个基于SQL Server(ODBC)链接表的Access数据库。 主窗体基于SQL Server表,其主键字段为 PRJ_ID 。 每条记录都有一个名为 MASTER_PRJ_REF 的整数字段,它可以包含同一记录的PRJ_ID或同一个表的另一条记录。

基本上,我可以在同一个表中拥有“主”记录和几个“从”记录。 我还指出在SQL Server中我创建了两个字段之间的一对多关系。

我想使用子窗体来显示并最终修改“master”记录的某些字段,但是父窗体显示“slave”记录。 我所做的是用这种关系创建子表单:

Parent form: PRJ_ID
Sub form: MASTER_PRJ_REF

问题是,子表单显示父表单的相同记录,而不是引用的表单。所以,似乎它没有遵循我的关系,而是遵循PRJ_ID与PRJ_ID的关系。

为什么这种关系不起作用?

在同一个表的两个字段之间建立关系是否正确?

1 个答案:

答案 0 :(得分:0)

我不知道为什么Access陷入困境,因为我总是自己使用VBA和纯SQL做事,而且从不依赖Access内置功能,这通常更有效,并避免像“一个”这样的“错误”你遇到了。

所以,如果你想像我一样编码,这是我可以提出的解决方法。

开始删除表单上的父/子(如果您愿意,主/从)关系。

在主表单的current事件中,添加以下代码:

dim strSQL as string

' adapt the following SQL where needed :
' - adapt table name
' - Replace * with the columns you need
' - surround the MASTER_PRJ_REF with quotes if it's not a INT

strSQL = "SELECT * FROM thetable WHERE PRJ_ID=" & me!MASTER_PRJ_REF

' That's the tricky part. 
' I assumed your subform is named SubForm1, adapt this.
' You should assign your SQL to your subform record source 
' But access doesn't always accept all syntax following the context,
' so choose one that work for you and remove the others.

SubForm1.RecordSource = strSQL
Form_SubForm1.RecordSource = strSQL ' ---> this one should work for sure if you have added any code to the subform (create the subform module, even if its empty.
Forms("SubForm1").RecordSource = strSQL
Me!SubForm1.Form.RecordSource = strSQL
Forms!NameOfMainForm.SubForm1.Form.RecordSource = strSQL

希望5个解决方案中的一个能够正常工作。

如果数据没有立即更新,请添加以下内容,使用与您选择的5个相同的语法相同的语法。

 SubForm1.Requery