2021 年的 Excel ADODB 查询日期

Posted

技术标签:

【中文标题】2021 年的 Excel ADODB 查询日期【英文标题】:Excel ADODB Query Dates for year 2021 【发布时间】:2021-05-20 15:05:59 【问题描述】:

我正在尝试在 Excel 列中查询日期(例如,这是 2021 年,然后只从列中检索 2021 年的日期) 这就是我所拥有的

    CurrMonth = Format$(Date, "m/d/yyyy")
    PrevMonth = Format$(Date - Day(Date), "m/d/yyyy")
    sSQL = "SELECT * " & _
           "FROM [TEST2$] AS M  " & _
           "WHERE M.[something] = '" & rs.Fields("something").Value & "' AND " & _
           "      M.[Date] BETWEEN #" & PrevMonth & "# and #" & CurrMonth & "#" & _
          

【问题讨论】:

你得到什么输出?或者什么错误信息? 您的示例底部似乎也缺少代码 "' AND Year(M.[Date]) = " & Year(Date)? 我仍在获取 2020@d0little 的记录 ADODB.Command 与实际的Parameter 对象一起使用,将实际的Date 值分配给参数值,将字符串连接替换为? 参数(去掉所有分隔符),以及您不必再担心日期格式了。 SQL 命令字符串应类似于 "SELECT m.* FROM [TEST2$] m WHERE m.[Something]=? AND m.[Date] BETWEEN ? AND ?;" 【参考方案1】:

当您使用 ADODB 向数据库服务器发送查询时,您应该永远不必处理字符串连接以及字符串和日期文字分隔符。

改为使用正确参数化的Command 并向服务器发送constant 命令字符串:

'SQL string is a compile-time constant that NEVER includes any kind of user inputs:
Const sql As String = "SELECT m.* FROM [TEST2$] m WHERE m.[Something]=? AND m.[Date] BETWEEN ? AND ?;"

Dim cmd As ADODB.Command
Set cmd = New ADODB.Command
Set cmd.ActiveConnection = yourAdodbConnectionInstance
cmd.CommandType = adCmdText
cmd.CommandText = sql

'now append the positional parameters in order; use an actual Date value (not a String) for an adDate parameter:
cmd.Parameters.Append cmd.CreateParameter(...)
cmd.Parameters.Append cmd.CreateParameter(...)
cmd.Parameters.Append cmd.CreateParameter(...)

'now invoke .Execute and retrieve the results recordset:
Dim results As ADODB.Recordset
Set results = cmd.Execute

【讨论】:

以上是关于2021 年的 Excel ADODB 查询日期的主要内容,如果未能解决你的问题,请参考以下文章

IMEX=0 的 Excel ADODB 查询不从第一行返回数据

ADODB对象忽略excel中的文本

从ADODB记录集复制数据时,Excel表丢失数字格式

python 连接数据库,查询结果写入数据到excel

SQL 运行时错误的 Excel ADODB 连接

传递给 ADODB 的查询长度是不是有限制?