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

MS Access - Form and subform based on same table, but different record

我有一个基于来自 SQL 服务器 (ODBC) 的链接 table 的 Access 数据库。 主窗体基于 SQL 服务器 Table,主键字段名为 PRJ_ID。 每条记录都有一个名为 MASTER_PRJ_REF 的整数字段,它可以包含同一记录的 PRJ_ID 或同一记录的另一条记录 table.

基本上,我可以在同一个 table 中有一个 "master" 记录和多个 "slave" 记录。 我还指定在 SQL 服务器中我在两个字段之间创建了一对多关系。

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

Parent form: PRJ_ID
Sub form: MASTER_PRJ_REF

问题是,子表单显示与父表单相同的记录,而不是引用的记录。所以,好像不是在关注我的关系,而是在关注PRJ_ID到PRJ_ID的关系

为什么关系不起作用?

相同table的两个字段之间建立关系是否正确?

我不知道为什么 Access 会搞砸,因为我总是自己用 VBA 和纯粹的 SQL 做事,从不依赖 Access 内置功能,后者通常更有效, 并避免像您遇到的那样 "bugs"。

因此,如果您想像我一样编写代码,我可以提供以下解决方法。

开始删除表单上的 parent/child(master/slave)关系。

在主窗体的 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