从 SQL Server 2008 升级到 2017 会导致使用 DCount 的 Access 前端表单出现日期减法错误
Upgrade from SQL Server 2008 to 2017 causes date subtraction error on Access front end form using DCount
我从一位多年前离开公司的员工那里继承了对数据库的支持。使用它的团队被迫从 SQL Server 2008 升级到 SQL Server 2017。
一切似乎都正常,但有一个表单包含使用 DCount
函数显示一些数据计数的文本框。当它试图从 [=42= 的 [DateReceived]
列(SQL 服务器中的 smalldatetime
类型)中减去今天的日期(使用 Date()
)时,问题就出现了] 在 DCount
函数中。
这有效
=DCount("[ClaimNum]","tblClaimsData","[ClaimStatus] = 'Open' and #2/4/2021# - [DateReceived] between 45 and 59")
这会引发错误
=DCount("[ClaimNum]","tblClaimsData","[ClaimStatus] = 'Open' and Date() - [DateReceived] between 60 and 90")
我似乎无法找出问题所在的 Date()
函数的解决方法。我有一个计算数据 table 的查询,但我无法将查询作为文本框的控制源,也无法获取另一个文本框的值来代替我的 Date()
DCount
函数。
有什么想法吗?谢谢!
ODBC SQL subtraction error
Form with counts - the one that works has the date hard coded in the DCount function
错误消息 crystal 清楚。您的数据类型现在是 DateTime2,ODBC 驱动程序将其读取为文本,导致任何数字日期处理失败。
最好的选择是将数据类型更改为 DateTime,这样您的代码就可以工作了。
否则,将文本日期转换为真实日期:
=DCount("[ClaimNum]","tblClaimsData","[ClaimStatus] = 'Open' and Date() - DateValue([DateReceived]) between 60 and 90")
但是,如果文本日期包含毫秒,如 2021-02-04 15:42:30.000
。
,那可能仍然会失败
如果是这样,则必须在转换前将其切掉。
我从一位多年前离开公司的员工那里继承了对数据库的支持。使用它的团队被迫从 SQL Server 2008 升级到 SQL Server 2017。
一切似乎都正常,但有一个表单包含使用 DCount
函数显示一些数据计数的文本框。当它试图从 [=42= 的 [DateReceived]
列(SQL 服务器中的 smalldatetime
类型)中减去今天的日期(使用 Date()
)时,问题就出现了] 在 DCount
函数中。
这有效
=DCount("[ClaimNum]","tblClaimsData","[ClaimStatus] = 'Open' and #2/4/2021# - [DateReceived] between 45 and 59")
这会引发错误
=DCount("[ClaimNum]","tblClaimsData","[ClaimStatus] = 'Open' and Date() - [DateReceived] between 60 and 90")
我似乎无法找出问题所在的 Date()
函数的解决方法。我有一个计算数据 table 的查询,但我无法将查询作为文本框的控制源,也无法获取另一个文本框的值来代替我的 Date()
DCount
函数。
有什么想法吗?谢谢!
ODBC SQL subtraction error
Form with counts - the one that works has the date hard coded in the DCount function
错误消息 crystal 清楚。您的数据类型现在是 DateTime2,ODBC 驱动程序将其读取为文本,导致任何数字日期处理失败。
最好的选择是将数据类型更改为 DateTime,这样您的代码就可以工作了。
否则,将文本日期转换为真实日期:
=DCount("[ClaimNum]","tblClaimsData","[ClaimStatus] = 'Open' and Date() - DateValue([DateReceived]) between 60 and 90")
但是,如果文本日期包含毫秒,如 2021-02-04 15:42:30.000
。
如果是这样,则必须在转换前将其切掉。