【问题标题】:SQL SELECT QUERY with WHERE AND doesn't work带有 WHERE AND 的 SQL SELECT QUERY 不起作用
【发布时间】:2021-11-10 12:09:59
【问题描述】:

这显示记录

sqlStr = "SELECT * FROM Table1 WHERE DateOfHoliday >= #" & d1 & "#"

这不是

sqlStr = "SELECT * FROM Table1 WHERE DateOfHoliday >= #" & d1 & "# AND DateOfHoliday <= #" & d2 & "#"

d1d2是日期时间,DateOfHolidayd1d2的格式是一样的(MM/DD/YYYY)

例如

Dim d1 As Date
d1 = #9/15/2021#
Dim d2 As Date
d2 = #11/29/2021# 

DateOfHoliday 之一是 2021 年 9 月 28 日 Debug.Print strSQL 返回:

SELECT * FROM Table1 WHERE DateOfHoliday >= #9/15/2021# AND DateOfHoliday <= #11/29/2021#

【问题讨论】:

  • 编辑问题以提供示例数据和所需的输出作为文本表。您的日期是美国结构 (MM/DD/YYYY) 吗?
  • 尝试在WHERE子句中使用OR而不是AND
  • 在下一行使用Debug.Print strSQL 查看完整的 SQL 语句是什么样的。
  • 永远不要对日期使用字符串连接,因为处理方式取决于计算机区域设置。改用参数:How do I use parameters in VBA in the different contexts in Microsoft Access?
  • 代码适用于我的任何一种语法。

标签: sql vba ms-access where-clause


【解决方案1】:

使用 ( ) 中的每个条件尝试此查询

"SELECT * FROM Table1 WHERE (DateOfHoliday >= #" & d1 & "#) AND (DateOfHoliday <= #" & d2 & "#)"

【讨论】:

  • 这些括号不会改变行为。这些标准应该在没有它们的情况下起作用。还有其他问题。
【解决方案2】:

首先,日期 值没有格式。接下来,您的日期字段很可能是 Text。试试:

sqlStr = "SELECT * FROM Table1 WHERE DateValue(DateOfHoliday) >= #" & d1 & "# AND DateValue(DateOfHoliday) <= #" & d2 & "#"

【讨论】:

    【解决方案3】:

    我同意前面的回答,即这很可能是数据类型问题。或者您可以尝试上一个答案中建议的代码:

    sqlStr = "SELECT * FROM Table1 WHERE CDate(DateOfHoliday) >= Cdate(#" & d1 & "#) AND CDate(DateOfHoliday) <= CDate(#" & d2 & "#)"
    

    如果仍然失败,我建议您尝试以下解决方法:

    sqlStr = "SELECT * FROM (SELECT * FROM Table1 WHERE DateOfHoliday >= #" & d1 & "#) WHERE DateOfHoliday <= #" & d2 & "#)"
    

    LightningGuide.net 中的更多信息。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-02-24
      • 2019-11-29
      • 2016-07-06
      • 2013-10-10
      • 2011-06-28
      • 1970-01-01
      • 2013-05-13
      • 1970-01-01
      相关资源
      最近更新 更多