【问题标题】:It seems like WHERE clause does not work in my VBA code似乎 WHERE 子句在我的 VBA 代码中不起作用
【发布时间】:2019-08-06 17:59:55
【问题描述】:
Dim rs As New ADODB.Recordset
Dim str SQL AS String
Dim strConn As String
Dim FUMR_date As Date

FUMR_date = "2019-02-20 11:00"
strSQL = "SELECT * FROM [initial DB] " & _
        " WHERE (date(LNT) < date(FUMR_date) )"


strConn = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & ThisWorkbook.Path & "\Alldata.mdb;" 
rs.Open strSQL, strConn, adOpenStatic, adLockReadOnly, adCmdText

Alldata.mdb 中有一个名为 Initial DB 的表。 LNT 是 Initial DB 表的列名。日期信息在 LNT 列中。

我要做的是调用 LNT 值早于 FUMR_date 的数据集。但是我的代码根本不起作用。我总是遇到运行时错误。

我也试过

    " WHERE (Datevalue(LNT) < Datevalue(FUMR_date) )"

它没有工作。然而,

    " WHERE (Datevalue(LNT) < Datevalue(now()) )"

此代码有效。我不知道为什么。请让我知道问题所在。

【问题讨论】:

  • 如果您在 Access 中编写此查询并将值替换为您的变量,此查询是否有效?如果它确实在 Access 中工作,那么更多地查看进入查询的值。尝试使用 Debug.Print variable 查看您提供的值
  • 您实际上并没有使用 FUMR_Date 的变量,这是故意的吗?或者应该是strSQL = "SELECT * FROM [initial DB] " &amp; _ " WHERE (date(LNT) &lt; date(" &amp; FUMR_date &amp; ") )"

标签: sql vba date where


【解决方案1】:

命令字符串直接发送到数据库。但是,FUMR_date 是一个 VBA 变量,在您的数据库中是未知的。
要快速解决,请写 " WHERE (date(LNT) &lt; date('" &amp; FUMR_date &amp; "') )" - 这会将变量的内容(作为字符串)放入 Where 子句中。

但是,最好使用 ADODB-Command 并为日期添加 ADODB-Parameter,这样您就不必关心日期格式

【讨论】:

  • 感谢您的评论。但是,它仍然不起作用。但是,如果我更改日期 -> 日期值,您建议的代码将起作用。为什么会这样???
  • 我对MS-Access不是很熟悉,但我认为date()是一个返回当前日期的无参数函数
猜你喜欢
  • 2018-03-10
  • 1970-01-01
  • 2017-12-22
  • 1970-01-01
  • 1970-01-01
  • 2016-08-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多