MS Access - 基于同一张表但不同记录的表单和子表单
Posted
技术标签:
【中文标题】MS Access - 基于同一张表但不同记录的表单和子表单【英文标题】:MS Access - Form and subform based on same table, but different record 【发布时间】:2016-04-21 08:53:28 【问题描述】:我有一个基于 SQL Server (ODBC) 链接表的 Access 数据库。 主表单基于一个 SQL Server 表,其中包含一个名为 PRJ_ID 的主键字段。 每条记录都有一个名为 MASTER_PRJ_REF 的整数字段,它可以包含同一条记录的 PRJ_ID 或同一表的另一条记录。
基本上,我可以在同一个表中有一个“主”记录和几个“从”记录。 我还指定在 SQL Server 中我创建了两个字段之间的一对多关系。
我想使用子表单来显示并最终修改“主”记录的某些字段,但父表单显示“从”记录。 我所做的是创建具有这种关系的子表单:
Parent form: PRJ_ID
Sub form: MASTER_PRJ_REF
问题是,子表单显示与父表单相同的记录,而不是引用的记录。所以,它似乎不是遵循我的关系,而是遵循 PRJ_ID 到 PRJ_ID 的关系。
为什么这种关系不起作用?
在同一张表的两个字段之间建立关系是否正确?
【问题讨论】:
如果记录是***记录,我认为 MASTER_PRJ_REF 应该为空。 【参考方案1】:我不知道为什么 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
【讨论】:
这个方法不错,明天一定要试试!!谢谢以上是关于MS Access - 基于同一张表但不同记录的表单和子表单的主要内容,如果未能解决你的问题,请参考以下文章
MS ACCESS:打印基于记录集而不是 record_ID 的报告