子表单的全部意义在于它由记录源以及链接子字段和主字段控制。假设表单是公司,子表单是员工,子表单的记录源可能是:
SELECT EmployeeID, CompanyID, Position, Etc FROM Employees
链接子字段和主字段将为 CompanyID。当您在主表单中移动时,只会显示与当前公司相关的那些记录。假设您只想显示那些技术职位的员工,您可以在运行时更改记录源:
SELECT EmployeeID, CompanyID, Position, Etc FROM Employees
WHERE Position = "Technical"
或者,如果这始终是表单上的过滤器,请在主表单中添加一个组合框,并将其用作第二个链接主字段,这样您就有:
Link Master Fields: CompanyID; cboPosition
Link Child Fields : CompanyID; Position
最后,您可以简单地从主窗体设置过滤器属性:
Me.Employees_subform.Form.Filter = "Position=""Tecnical"""
Me.Employees_subform.Form.FilterOn = True
如果这不是您的想法,请在您的问题中添加一些注释。
编辑
您可以通过引用表单上的控件来为查询提供参数:
SELECT EmployeeID, CompanyID, Position, Etc FROM Employees
WHERE Position = Forms!MyMainForm!cboPosition
您可以完全更改查询的 SQL,并且可以使用 ADO,但是,更改 SQL 类似于设置记录源,因为 SQL 是在代码中更改的,并且使用 ADO 通常不是表单的最佳选择。
您不能做的是更改参数并将其“粘”在表单或子表单中。
例如:
DoCmd.SetParameter "@SomeID", "1"
' This works
DoCmd.OpenQuery ("Queryx")
' This will give a prompt for @SomeID and then run
Me.SomeSubform.Form.RecordSource = "Queryx"