为什么我的 WHERE 子句在我的组合框中不起作用
Why is my WHERE clause not working in my combo box
我有一个名为 NameFilt 的组合框。我希望行源如下:
SELECT DISTINCT VoucherListTbl.BuyerName
FROM VoucherListTbl
WHERE (((VoucherListTbl.BuyerName) Is Not Null)) OR (((VoucherListTbl.BuyerName)<>""));
即显示我的 table 中所有唯一的 BuyerNames,不要包含任何空白
通过单击 属性 sheet 中组合框行源中的 3 个点,然后选择 BuyerName 字段,然后输入 Is Not Null Or <,在查询构建器中生成上面的 SQL >”在条件中。单击查询生成器中的 运行 会显示我期望的确切结果。
关闭并保存查询构建器,然后单击表单上的组合框后,我得到了不同的结果 - 所有不同的名称都在那里,但列表的开头是空白。
当我尝试在我的 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 名称,列表顶部有一个空白选项,这是人们所期望的
请你帮忙解释一下为什么输入 VBA 代码时 WHERE 子句对我不起作用
非常感谢
如果您在 ""
中使用 ""
,它会破坏字符串,这就是 WHERE 条件无效的原因。使用 ""
对引号进行编码,即原始字符串的末尾应类似于 <>""""));"
或将 ""
替换为 ''
并重试。
注意,相同的查询可以写成
SELECT DISTINCT BuyerName
FROM VoucherListTbl
WHERE IsNull(BuyerName,'')<>''
我有一个名为 NameFilt 的组合框。我希望行源如下:
SELECT DISTINCT VoucherListTbl.BuyerName
FROM VoucherListTbl
WHERE (((VoucherListTbl.BuyerName) Is Not Null)) OR (((VoucherListTbl.BuyerName)<>""));
即显示我的 table 中所有唯一的 BuyerNames,不要包含任何空白 通过单击 属性 sheet 中组合框行源中的 3 个点,然后选择 BuyerName 字段,然后输入 Is Not Null Or <,在查询构建器中生成上面的 SQL >”在条件中。单击查询生成器中的 运行 会显示我期望的确切结果。
关闭并保存查询构建器,然后单击表单上的组合框后,我得到了不同的结果 - 所有不同的名称都在那里,但列表的开头是空白。 当我尝试在我的 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 名称,列表顶部有一个空白选项,这是人们所期望的
请你帮忙解释一下为什么输入 VBA 代码时 WHERE 子句对我不起作用 非常感谢
如果您在 ""
中使用 ""
,它会破坏字符串,这就是 WHERE 条件无效的原因。使用 ""
对引号进行编码,即原始字符串的末尾应类似于 <>""""));"
或将 ""
替换为 ''
并重试。
注意,相同的查询可以写成
SELECT DISTINCT BuyerName
FROM VoucherListTbl
WHERE IsNull(BuyerName,'')<>''