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

Posted

技术标签:

【中文标题】为啥我的 WHERE 子句在我的组合框中不起作用【英文标题】:Why is my WHERE clause not working in my combo box为什么我的 WHERE 子句在我的组合框中不起作用 【发布时间】:2020-04-03 11:26:20 【问题描述】:

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

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

即显示我表中的所有唯一买家名称,并且不包含任何空白 上面的 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 名称,列表顶部有一个空白选项,这是人们所期望的

请您帮忙解释一下为什么在输入 VBA 代码时 WHERE 子句对我不起作用 非常感谢

【问题讨论】:

【参考方案1】:

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

注意,同样的查询可以写成

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

【讨论】:

以上是关于为啥我的 WHERE 子句在我的组合框中不起作用的主要内容,如果未能解决你的问题,请参考以下文章

Crystal Reports v13.0.2000.0.:为啥“where”子句在子报表中不起作用?

MS Access - 自动填充在组合框中不起作用

为啥“发布”方法在我的 django 应用程序中不起作用?

为啥绝对路径在我的项目中不起作用?

带有日期字符串的 Android SQLite rawquery 在 WHERE 子句中不起作用

为啥我的约束在我的 xib 文件中不起作用