似乎WHERE子句在我的VBA代码中不起作用 Dim rs作为新的ADODB.Recordset Dim str SQL作为字符串 作为字符串的Dim strConn Dim FUMR_日期作为日期 FUMR_date=“2019-02-20 11:00” strSQL=“从[初始数据库]中选择*”&_ “其中(日期(LNT)

似乎WHERE子句在我的VBA代码中不起作用 Dim rs作为新的ADODB.Recordset Dim str SQL作为字符串 作为字符串的Dim strConn Dim FUMR_日期作为日期 FUMR_date=“2019-02-20 11:00” strSQL=“从[初始数据库]中选择*”&_ “其中(日期(LNT),sql,vba,date,where,Sql,Vba,Date,Where,Alldata.mdb中有一个名为Initial DB的表。LNT是初始DB表的列名。日期信息在LNT列中 我试图做的是调用LNT值早于FUMR_日期的数据集。但我的代码根本不起作用。我总是遇到运行时错误 我也试过了 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 = "SEL

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

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

我也试过了

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
“其中(Datevalue(LNT)
但它不起作用。但是,

    " WHERE (Datevalue(LNT) < Datevalue(FUMR_date) )"
“其中(Datevalue(LNT)

这个代码有效。我不知道为什么。请告诉我问题所在。

命令字符串将直接发送到数据库。但是,
FUMR_date
是一个VBA变量,在数据库中是未知的。
要快速解决问题,请写
“WHERE(date(LNT)
-这将把变量的内容(作为字符串)放入WHERE子句中


但是,最好使用ADODB命令并为日期添加ADODB参数,这样您就不必关心日期格式了。命令字符串将直接发送到数据库。但是,
FUMR_date
是一个VBA变量,在数据库中是未知的。
要快速解决问题,请写
“WHERE(date(LNT)
-这将把变量的内容(作为字符串)放入WHERE子句中


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

如果在Access中写入此命令并用值替换变量,此查询是否有效?如果它确实在Access中起作用,那么请进一步查看查询中的值。尝试使用
Debug.Print variable
查看您提供的值您实际上没有使用FUMR_Date变量,这是故意的吗?或者这应该是
strSQL=“SELECT*FROM[initial DB]”和&“WHERE(date(LNT)
如果您在Access中写入此项并用值替换变量,此查询是否有效?如果它确实在Access中起作用,那么请进一步查看查询中的值。尝试使用
Debug.Print variable
查看您提供的值您实际上没有使用FUMR_Date变量,这是故意的吗?或者应该是
strSQL=“SELECT*FROM[initial DB]”和“WHERE(date(LNT)
谢谢您的评论。然而,它仍然不起作用。但如果我更改date->Datevalue,您建议的代码就可以工作了。这是为什么???我对MS Access不是很熟悉,但我认为
date()
是一个无参数函数,返回当前日期谢谢您的评论。然而,它仍然不起作用。但如果我更改date->Datevalue,您建议的代码就可以工作了。为什么???我对MS Access不是很熟悉,但我认为
date()
是一个返回当前日期的无参数函数
    " WHERE (Datevalue(LNT) < Datevalue(now()) )"