【问题标题】:Formatting using FormatDateTime for running SQL Query in MS Access使用 FormatDateTime 格式化以在 MS Access 中运行 SQL Query
【发布时间】:2016-05-26 07:10:00
【问题描述】:

我在 MS Access 表中的 TakeDate 字段(数据类型:日期)中有日期。 我在搜索表单中有一个文本框 txtGdateTo,其中 Format 设置为 Short Date

当我运行如下 SQL 查询时,我没有得到想要的数据过滤。

Select * from tblWork WHERE TakeDate <= Me.txtGdateTo

因此我尝试了以下 SQL,但它也不起作用。

Select * from tblWork WHERE TakeDate <= Format(Me.txtGdateTo, "\#mm\/dd\/yyyy\#")

我用函数向表格TakeDate0添加了另一个字段

TakeDate0: FormatDateTime([TakeDate],"\#mm/dd/yyyy\#")

这给了我#error 的价值。

问:有没有使用日期字段管理这些错误的最佳方法?

问:需要做什么格式,是否需要额外的列?

在我的例子中,用户将在表格中输入 dd/mm/yyyy 格式的数据

【问题讨论】:

标签: date ms-access vba


【解决方案1】:

Me 不能用于查询。所以试试:

Select * From tblWork Where TakeDate <= Format(Forms!YourForm!txtGdateTo, "\#mm\/dd\/yyyy\#")

在 VBA 中,您必须在连接之前格式化日期的 字符串表达式,例如:

SQL = "Select * From tblWork Where TakeDate <= #" & Format(Me!txtGdateTo.Value, "yyyy\/mm\/dd") & "#"

【讨论】:

  • 我在一个字符串中构造 SQL 查询,然后将该字符串分配给列表框的 Row 源
  • 感谢您的帮助,我使用的功能不正确。我在回答中提到了正确的方法。
【解决方案2】:

在研究了大约 2 个小时并从 @Gustav 的答案中得到了一些提示后,我能够找出问题的解决方案。

第一个 - 使用函数 FormatDateTime 而不是 Format

Select * from tblWork WHERE TakeDate <= #" & FormatDateTime(Me.txtTdateTo, 2) & "#"

2nd - 确保格式正确

txtGdateTo 在搜索表单中,Format 设置为 Short Date

3rd - 不需要另一列来提供搜索功能。

【讨论】:

  • 抱歉,FormatDateTime 用于其他目的,不像这里在非英语环境中注定会失败,因为参数“2”(vbShortDate)会产生一个本地化的日期的字符串表达式,而您需要的是 Access SQL 理解的非本地化明确格式,如 ISO 序列:yyyy-mm-dd.
  • 感谢分享。我所有的用户都将以英语为基础。我肯定知道这一点。还会是错误的使用方式吗?
猜你喜欢
  • 1970-01-01
  • 2021-05-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-04-03
  • 2014-08-26
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多