我有一个基于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的关系。
为什么这种关系不起作用?
在同一个表的两个字段之间建立关系是否正确?
答案 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