【发布时间】:2014-05-24 17:14:43
【问题描述】:
我有 5 个组合框,用于过滤列表框。我想这样做,所以不必选择所有 5 个才能使过滤器工作。每个组合框都以空白 ( "" ) 开头,我希望能够跳过 1 个或多个组合框并使用我选择的组合框进行过滤。这是其中一个组合框的更新后代码:
On Error Resume Next
'These are the comboboxes
Me.BilletMaterial.RowSource = [MechanicalData.Billet Material]
Me.BilletNumber.RowSource = [MechanicalData.Billet Number]
Me.TestType.RowSource = [MechanicalData.Test Type]
Me.Axis.RowSource = [MechanicalData.Axis]
Me.Temperature.RowSource = [MechanicalData.Temperature]
Me.BilletMaterial.Requery
Me.BilletNumber.Requery
Me.TestType.Requery
Me.Axis.Requery
Me.Temperature.Requery
'Listbox
Me.DataView.RowSource = "SELECT [Billet Material],[Billet Number], " & _
"[Specimen],[Temperature],[Modulus],[Ultimate Tensile Strength],[Strain] " & _
"FROM MechanicalData " & _
"WHERE 1=1 " & _
"AND [MechanicalData.Axis] = '" & Me.Axis.Value & "' " & _
"AND [MechanicalData.Test Type] = '" & TestType.Value & "' " & _
"AND [MechanicalData.Temperature] = " & Temperature.Value & " " & _
"AND If (Not IsNull(BilletNumber.Value)) Then [MechanicalData.Billet Number] = " & BilletNumber.Value & " End if " & _
"AND [MechanicalData.Billet Material] = '" & BilletMaterial.Value & "' "
我的第一个想法是在 SELECT 语句的 WHERE 部分中实现多个“if is not empty...”语句,但我不确定如何做到这一点,或者即使有可能。
我知道这一行的语法是错误的。
"AND If (Not IsNull(BilletNumber.Value)) Then [MechanicalData.Billet Number] = " & BilletNumber.Value & " End if " & _
【问题讨论】:
-
为什么不使用
If (Not IsNull(Combo)) Then strWhere = strWhere &构建WHERE字符串 -
@Remou is 'strWhere = strWhere' 在您的评论中相当于我的代码中的 [MechanicalData.Axis] = '" & Me.Axis.Value & "'" (etc)?
-
是的,只需建立 where 语句。您可能想以
WHERE 1=1开头,所以其他所有内容都可以是AND this=that -
@Remou 我在帖子底部根据您的建议添加了一行代码。我对正确的语法还不太熟悉,所以如果你能引导我朝着正确的方向前进,那将非常有帮助。
-
我认为您没有正确使用字符串连接。它应该看起来像
AND [MechanicalData.Axis] = " & Me.Axis.Value & ".. 不需要单引号。这以前真的有效吗?另外,当我检查组合框中的 Null 值时,我使用了 Remou 描述的方法(除了我使用If IsNull (Object.Value) = False Then)
标签: vba ms-access combobox ms-access-2007