首页 > 解决方案 > 似乎 WHERE 子句在我的 VBA 代码中不起作用

问题描述

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()) )"

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

标签: sqlvbadatewhere

解决方案


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

但是,最好使用 ADODB 命令并为日期添加 ADODB 参数,这样您就不必关心日期格式


推荐阅读