【问题标题】:Form filtered date results returning both dd/mm/yyyy and mm/dd/yyyy表单过滤日期结果返回 dd/mm/yyyy 和 mm/dd/yyyy
【发布时间】:2016-11-21 15:23:09
【问题描述】:

拥有包含 2 个日期字段和一个金额字段的 MS Access 表单。

这个想法是允许用户对表单应用过滤器,以过滤 2 个日期和超过一定数量的结果。但是结果不一致,它倾向于在结果中列出mm/dd/yyyydd/mm/yyyy 格式的日期。我只想要dd/mm/yyyy,这是短日期和系统日期的设置。

strCriteria = 
            "([Order Date] >= #" & Me.txtOrderDateFrom & "# 
                AND [Order Date] <= #" & Me.txtOrderDateTo & "# 
                And [Order Amount]>= " & (CLng(Me.txtSumOfLinePrice)) & ")"

task = "select * from OrderListQ where (" & strCriteria & ") order by [order date]"

DoCmd.ApplyFilter task

【问题讨论】:

    标签: sql ms-access vba


    【解决方案1】:

    您必须为日期值的字符串表达式应用正确的格式:

    strCriteria = "[Order Date] >= #" & Format(Me!txtOrderDateFrom.Value, "yyyy\/mm\/dd") & "# AND [Order Date] <= #" & Format(Me!txtOrderDateTo.Value, yyyy\/mm\/dd") & "# And [Order Amount] >= " & Str(Me!txtSumOfLinePrice.Value) & ""
    

    【讨论】:

    • 我想指出 Gustav 您也在使用本地化表达式。不同之处在于,与短格式相比,数据库可以更好地解释中长本地化格式。
    • 否,yyyy\/mm\/dd 仅返回数字,反斜杠转义斜杠以强制在输出中使用斜杠,而不是仅返回斜杠的本地化日期分隔符,因此该表达式永远不会本地化.此外,ISO 序列 yyyy-mm-dd 是明确的,因此 - 最后 - 将长格式或任何其他格式理解为“更好”是不正确的;它将总是被正确理解,因此没有“更好”的格式。
    • 如果数据库中的日期格式与应用程序存在差异,则不能保证仅数字有效 - 任何格式仅返回字符串,美国日期会导致欧洲和其他地区使用的日期出现问题以英国为例
    • 这是不正确的。 ISO 序列中的纯数字格式是唯一的格式,保证在任何情况下的任何环境中都能正常工作。 “反向”美国格式 mm/dd/yyyy 适用于 SQL,但不适用于 ADO。通用格式 dd/mm/yyyy 在 1 到 12 天的任何时间都将失败。当然,如果您将日期存储为字符串 - 这是一个禁忌 - 您将不得不采用。但在 Access 中,除了数据类型 Date 之外,没有理由将日期存储为其他任何内容。
    【解决方案2】:

    为了避免任何日期格式问题,我发现使用 DD MMM yyyy 格式适用于跨服务器和机器 2016 年 1 月 10 日比 10/1/2016 或 1/10/2016 更可靠

    strCriteria = "[Order Date] >= #" & Format(Me!txtOrderDateFrom.Value, "dd MMM yyyy") & "# AND [Order Date] <= #" & Format(Me!txtOrderDateTo.Value, dd MMM yyyy") & "# And [Order Amount] >= " & Str(Me!txtSumOfLinePrice.Value) & ""
    

    对于那些有问题的人使用格式(日期,“长日期”)

    【讨论】:

    • 这将在非英语环境中失败。永远不要使用本地化表达式 - 作为 mmm。
    • 使用 VBA 将 mmm 本地化为国际和区域设置。见globaliconnect.com/excel/…
    • 是的,这就是为什么您应该始终避免使用 MMM 来构建 SQL 字符串。他们会失败的。
    猜你喜欢
    • 2016-01-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-30
    • 2010-10-04
    • 1970-01-01
    • 2023-03-27
    相关资源
    最近更新 更多