【问题标题】:How to properly set ADODB.Recordset.Filter property for a DateTime value?如何正确设置 DateTime 值的 ADODB.Recordset.Filter 属性?
【发布时间】:2012-01-25 19:49:16
【问题描述】:

我有一个 ADODB 2.x 记录集,正在尝试对记录集中的 DateTime 列/字段应用过滤器。

我不知道他们是如何在 Windows 中配置他们的国际日期格式设置的。从大量的谷歌搜索中,我不完全确定 Windows 日期格式设置是否确定了 Filter 属性所需的日期格式,或者它是否总是预期为美国日期格式。 (当然,MS 文档没有说明这一点。)

那么,如何正确编写这行代码,这样我就不用担心用户在 Windows 中配置了什么日期格式:

rs.Filter = "StartDateTime >= " & dteStartDate

...其中 dteStartDate 包含日期和时间组件。

【问题讨论】:

    标签: vba vb6 excel adodb


    【解决方案1】:

    过滤器的格式需要与记录集中的值具有相同的格式。我刚刚遇到了来自 MS SQL 服务器的记录集的相同问题。记录集包含 YYYY-MM-DD 格式的日期。

    这失败了:

    CalendarRS.filter = "DateField = #" & datevalue(DisplayDate) & "#"
    

    即使日期匹配,过滤的记录集中也没有记录。选中后,CalendarRS.filter 中存储的值为“DateField = #08/29/2014#” 请注意,其中包含正斜杠并且顺序不同(MM/DD/YYYY)

    这成功了:

    CalendarRS.filter = "DateField = #" & year(datevalue(DisplayDate)) & "-" &  right("00" & month(datevalue(DisplayDate)),2) & "-" &  right("00" & day(datevalue(DisplayDate)),2) & "#"
    

    选中后,CalendarRS.filter 中存储的值为“DateField = #2014-08-2014#”。这返回了正确的过滤记录集。

    对于完整的日期和时间,您需要做同样的事情并添加小时、分钟、秒。

     CalendarRS.filter = "DateField = #" & year(datevalue(DisplayDate)) & "-" & right("00" & month(datevalue(DisplayDate)),2) & "-" & right("00" & day(datevalue(DisplayDate)),2) & " " & Right("00" & Hour(datevalue(DisplayDate)),2) & ":" & Right("00" & Minute(datevalue(DisplayDate)),2) & ":" & Right("00" & Second(datevalue(DisplayDate)),2) & "#"
    

    【讨论】:

      猜你喜欢
      • 2011-08-05
      • 2014-10-31
      • 1970-01-01
      • 1970-01-01
      • 2015-05-20
      • 2018-02-18
      • 2017-05-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多