You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Access前端对接SQL Server后端后DMax函数忽略日期筛选条件问题

问题根因

  • 核心差异:Access本地数据库使用#作为日期定界符,后端迁移到SQL Server后,DMax函数生成的筛选条件会提交给SQL Server解析,而SQL Server不识别#作为日期定界符,导致筛选条件失效,最终返回全表最大的月末日期。
  • 潜在风险:直接拼接日期字符串未做格式统一,易受系统区域设置影响,导致SQL Server日期解析错误。

解决方案

方案1:调整DMax筛选条件写法

将日期定界符改为SQL Server支持的单引号,同时将日期格式化为yyyy-mm-dd的通用格式,避免区域兼容问题,修改后的代码如下:

If Weekday(Now()) < 3 Then
   NextSunday = DateAdd("d", 1 - Weekday(Now()), Date)
Else
   NextSunday = DateAdd("d", 8 - Weekday(Now()), Date)
End If
' 仅修改DMax行的条件拼接逻辑
nextMonthEnd = DMax("[Month End Date]", "[Month End]", "[Month End Date] < '" & Format(NextSunday, "yyyy-mm-dd") & "'")

方案2:使用原生T-SQL查询(兼容更复杂场景)

如果调整后仍存在语法转换问题,可以直接通过ADODB执行SQL Server原生查询,绕过Access函数的语法转换层:

Dim conn As ADODB.Connection
Dim rs As ADODB.Recordset
Set conn = CurrentProject.Connection
Set rs = conn.Execute("SELECT MAX([Month End Date]) AS max_month_end FROM [Month End] WHERE [Month End Date] < '" & Format(NextSunday, "yyyy-mm-dd") & "'")
If Not rs.EOF Then
    nextMonthEnd = rs!max_month_end
End If
rs.Close
Set rs = Nothing
Set conn = Nothing

内容的提问来源于stack exchange,提问作者BWhite

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 06:18:01