向 VBA 代码添加条件并重新查询
Posted
技术标签:
【中文标题】向 VBA 代码添加条件并重新查询【英文标题】:Add Criteria To VBA Code and Requery 【发布时间】:2013-01-30 18:47:54 【问题描述】:因此,我拥有的以下 VBA 代码将根据等于一月的 Combo1 值重新查询表单。最终,我将在 Combo 值中有 X 年,并且只想显示基于每年的所有记录。
是否可以添加额外的 VBA 代码来使用查询中的条件,而不是有 X 数量的查询并根据年份重新查询它们。
Private Sub Combo1_AfterUpdate()
If Combo1.Value = "2013" Then
[Form_Main Form].RecordSource = "Main_Form_Query"
[Form_Main Form].Requery
End If
End Sub
【问题讨论】:
不想在RecordSource
属性中写入查询的名称,您可以在运行时创建SQL语句,并将其传递给该属性
可以在 VBA 中完成吗?我问的唯一原因是我对您所引用的建议不太熟悉。
我已经发布了一个答案来说明我的建议。希望对你有帮助。
【参考方案1】:
您可以在运行时构造查询(记住:访问中的查询对象只是一条sql语句)
因此,假设您的数据存储在名为 tblMyData
的表中,其中包含名为 month
(字符串、月份名称)和 year
(数字、整数)的列(只是示例)。您可以通过这种方式在 VBA 中生成 SQL 查询:
...
Dim strSQL as String
...
strSQL = "SELECT * FROM tblMyData " & _
"WHERE month='" & ComboMonth.Value & "' " & _
" AND year=" & ComboYear.Value ";"
...
[Form_Main Form].RecordSource = strSQL
[Form_Main Form].Requery
...
希望对你有所帮助。
【讨论】:
注意更改 RecordSource 属性会自动触发重新查询。您无需再次致电.Requery
。
@HansUp 不记得了 :-) 谢谢【参考方案2】:
Open the form 以不同的方式。
DoCmd.OpenForm "MyForm",,,"MyYear=2013"
或者
DoCmd.OpenForm "MyForm",,,"MyYear=" & Me.MyCombo
假设表或查询中的 MyYear 是数字。如果不是,可以使用单引号。
一般的想法是您使用包含所有记录的表单,并使用 OpenForm 的 Where 参数指定应显示的记录。您可以对报告执行相同的操作。
【讨论】:
【参考方案3】:对于您要完成的工作,我只有一个模糊的概念。向我们展示来自Main_Form_Query
的 SQL 可能会有所帮助。同时,考虑您是否可以使用表单的.Filter
属性来做您需要的事情。
如果表单的记录源包含名为 fiscal_year
的文本字段,您可以根据组合框中选择的年份过滤显示的行。
Private Sub Combo1_AfterUpdate()
' .Value is the default property, so not required after Me.Combo
Me.Filter = "fiscal_year = '" & Me.Combo1 & "'"
Me.FilterOn = True
End Sub
另一种方法是引用Main_Form_Query
中的组合值。
WHERE
Forms!YourForm!Combo1 Is Null
OR some_field = Forms!YourForm!Combo1
然后在组合的更新后事件中执行Me.Requery
。
【讨论】:
您是否建议 OP 阻止在表单上使用任何用户过滤器?如果有,怎么做?以上是关于向 VBA 代码添加条件并重新查询的主要内容,如果未能解决你的问题,请参考以下文章