为什么我的WHERE子句在组合框中不起作用



我有一个名为NameFilt的组合框。我希望行源如下:

SELECT DISTINCT VoucherListTbl.BuyerName
FROM VoucherListTbl
WHERE (((VoucherListTbl.BuyerName) Is Not Null)) OR (((VoucherListTbl.BuyerName)<>""));

即,显示我表中所有唯一的BuyerNames,不包括任何空格以上SQL是在查询生成器中生成的,方法是单击属性表中组合框行源中的3个点,然后选择BuyerName字段,然后输入is Not Null Or<>"。单击查询生成器中的"运行"将显示我期望的确切结果。

关闭并保存查询生成器,然后单击表单上的组合框,我会得到一个不同的结果——所有DISTINCT名称都在那里,但列表开头有一个空白。当我尝试在VBA代码中使用此SQL时,会得到另一个结果。代码为:

Private Sub NameFilt_GotFocus()
Me.AllowEdits = True
Me.NameFilt.RowSource = "SELECT DISTINCT VoucherListTbl.BuyerName
FROM VoucherListTbl WHERE  (((VoucherListTbl.BuyerName) Is Not Null))
OR (((VoucherListTbl.BuyerName)<>""));"
Me.NameFilt.Dropdown
End Sub

这导致组合框的下拉列表只显示一个选项-空白!没有列出任何名称。此外,如果删除WHERE子句,即代码为:

Private Sub NameFilt_GotFocus()
Me.AllowEdits = True
Me.NameFilt.RowSource = "SELECT DISTINCT VoucherListTbl.BuyerName FROM VoucherListTbl;"
Me.NameFilt.Dropdown
End Sub

然后显示DISTINCT名称,列表顶部有一个空白选项,这就是人们所期望的

你能解释一下为什么WHERE子句在输入VBA代码时对我不起作用吗非常感谢

如果在""中使用"",它将破坏字符串,这就是WHERE条件不起作用的原因。用""编码引号,即原始字符串的末尾应类似于<>""""));",或者用''替换"",然后重试。

注意,可以将相同的查询写入

SELECT DISTINCT BuyerName
FROM VoucherListTbl 
WHERE IsNull(BuyerName,'')<>''

最新更新