Access窗体数据源日期格式化问题及DSum计算报错排查
Access日期处理报错与Format函数异常解决方案
一、Format函数返回异常的原因及解决
德语版Access中,日期格式占位符与英文版本不同,你使用的dd和yyyy会被识别为字面量而非日期变量:
- 日的正确占位符是
tt(对应英文dd) - 年的正确占位符是
jjjj(对应英文yyyy) - 月的占位符
mm与英文一致
同时,Access自动修改引号是因为控件源中双引号需要转义,改用单引号包裹格式字符串可避免该问题。
正确的格式写法:
=Format(Datum();'tt-mm-jjjj')
执行后会返回02-07-2023这类正确格式的日期。
二、DSum计算上月总和的报错解决
报错核心是日期字符串拼接受区域格式影响,Access无法正确解析日期。推荐两种可靠方案:
方案1:使用ISO日期格式拼接(不受区域影响)
先计算上月的起始和结束日期,转换为yyyy-mm-dd格式后拼接进条件:
=DSum("Betrag"; "tbl_Ausgaben"; _ "[Datum] > #" & Format(DateAdd('m'; -1; Datum()) - Day(DateAdd('m'; -1; Datum())); "yyyy-mm-dd") & "# " & _ "AND [Datum] <= #" & Format(Datum() - Day(Datum()); "yyyy-mm-dd") & "#")
方案2:直接用日期函数生成条件(更简洁可靠)
利用DateSerial函数直接计算上月第一天和最后一天,无需拼接字符串,完全规避格式问题:
=DSum("Betrag"; "tbl_Ausgaben"; _ "[Datum] >= DateSerial(Year(Datum()); Month(Datum())-1; 1) " & _ "AND [Datum] <= DateSerial(Year(Datum()); Month(Datum()); 0)")
注:DateSerial(Year(Datum()); Month(Datum()); 0)会自动返回上月最后一天,比手动计算更稳定。
内容的提问来源于stack exchange,提问作者Wima
相关产品推荐
相关产品推荐

