在Access 2003中,我的表单包含数据表和嵌入式子数据表。我想对主数据表和子数据表应用过滤器。首先,我为主数据表strWhere
构建了一个过滤字符串,并为子数据表sdsWhere
构建了一个过滤字符串。接下来,从主数据表的From对象,我设置.filter=strWhere
。然后,我在子数据表的Form对象上设置了一个过滤器。基本上是:
With Me.Controls(dataSheetName).Form
.Filter = strWhere
.FilterOn = True
With .Controls(subsheetname).Form
.Filter = sdsWhere
.FilterOn = True
End with
End with
问题是子数据表仅针对主数据表的第一条记录进行过滤。查看子数据表的RecordSet,它只包含主数据表中第一条记录的子记录。我无法在任何地方找到其他记录。
我知道应该可以过滤所有子数据表记录,因为从Access界面,将光标放在所需的值中,然后选择记录>>按选择过滤具有所需的效果。 (除了主窗体中有空子数据表的记录显示,我希望它们不显示)
答案 0 :(得分:0)
使用查询。进行连接主数据集和子数据集的查询。过滤查询。我真的没有看到任何其他有效的方式。
答案 1 :(得分:0)
我是个白痴 - 想通了,当然只需移动子数据表的Recodset位置,然后应用滤镜直到eof。但我们需要转到第一条记录,否则它会在用户当前所在的记录之前错过记录。并确保subdatasheetexpanded为true。
Dim mainDS As Form, subDS As Form
Set mainDS = Me.Controls(dataSheetName).Form
If mainDS.SubdatasheetExpanded = False Then
mainDS.SubdatasheetExpanded = True
End If
mainDS.Recordset.MoveFirst
Do While Not mainDS.Recordset.EOF
Set subDS = mainDS.Controls(sdsheet).Form
subDS.Filter = sdsWhere
subDS.FilterOn = True
mainDS.Recordset.MoveNext
Loop