使用 SQL 服务器后台在 ACCESS 中管理日期查询

Managing Dates Query in ACCESS with SQL Server background

我正在 ACCESS 上做我的项目,用于表单的“前端”部分,在 SQL 服务器中,用于数据库的“后端”部分,一切正常,除了一件事:我不明白 如何使用 SQL 服务器的日期类型过滤 Access 的表单。

我在网上搜索了所有内容,所有解决方案似乎都不适用于我的情况(可能是因为 ACCESS/SQL 服务器环境),例如:

Me.Form1.Filter = "[date born] = #" & Format("11/04/2022", "dd/mm/yyyy") & "#"
'with VBA directly
SELECT * FROM dbo_Person WHERE [date born] = Format('11/04/2022','dd/mm/yyyy') ;
-- with SQL Request from ACCESS on the table

但每次我遇到同样的问题:即使右栏中有包含此日期的行,也不会显示任何内容。这就像如果没有行尊重这个条件,即使事实并非如此。 我猜这可能是 SQL 服务器日期类型在 ACCESS 上转换不佳的问题。

这就是我的 ACCESS 中默认显示列日期的方式(顺便说一句,我的 ACCESS 软件是用法语设置的)

数据被很好地识别为“不是字符串”,因为当我尝试使用字符串进行过滤时出现错误。

有人可以帮我知道我在哪里遗漏了什么或输错了什么吗?

Edit : Date 列似乎在 ACCESS 中实际上被识别为 Short String,这可能是问题所在但仍然不知道如何解决,因为它确实是sql 服务器上的日期类型

“Texte court”可以翻译成“short text”或short String

首先,如果您在 SQL 服务器中使用数据类型 DateTime2,那么在 Access 中将读取为文本。

因此,将其更改为 DateTime

接下来,在筛选日期值时使用通用格式yyyy-mm-dd:

FilterDate = DateSerial(2022, 4, 11)
Me.Filter = "[date born] = #" & Format(FilterDate, "yyyy\/mm\/dd") & "#"

' Linked table in Access:

Sql = "SELECT * FROM dbo_Person WHERE [date born] = #" & Format(FilterDate, "yyyy\/mm\/dd") & "#;"