从 SQL Server 2008 升级到 2017 导致使用 DCount 的 Access 前端表单上的日期减法错误

问题描述

我从一位多年前离开公司的员工那里继承了一个数据库支持。使用它的团队被迫从 sql Server 2008 升级sql Server 2017。

似乎一切正常,但有一个包含文本框的表单,使用 DCount 函数显示一些数据计数。当它试图从 Date() 的表中的 [DateReceived] 列(sql Server 中的 smalldatetime 类型)中减去今天的日期(使用 DCount)时,问题就出现了功能

这有效

=DCount("[ClaimNum]","tblClaimsData","[Claimstatus] = 'Open' and  #2/4/2021# - [DateReceived] between 45 and 59")

这会引发错误

=DCount("[ClaimNum]","[Claimstatus] = 'Open' and Date() - [DateReceived] between 60 and 90")

我似乎无法找出问题所在的 Date() 函数解决方法我有一个对数据表进行计数的查询,但我无法将查询作为文本框的控制源,也无法获取一个文本框的值来代替 {{1} 中的 Date() } 函数

这里有什么想法吗?谢谢!

ODBC SQL subtraction error

Form with counts - the one that works has the date hard coded in the DCount function

解决方法

错误信息非常清楚。您的数据类型现在是 DateTime2,ODBC 驱动程序将其读取为文本,从而导致任何数字日期处理失败。

最好的选择是将数据类型更改为 DateTime 并且您的代码将起作用。

否则,将文本日期转换为真实日期:

=DCount("[ClaimNum]","tblClaimsData","[ClaimStatus] = 'Open' and Date() - DateValue([DateReceived]) between 60 and 90")

但是,如果文本日期包含毫秒,例如 2021-02-04 15:42:30.000,这可能仍然失败。

如果是这样,必须在转换前将它们切掉。