Access查询日期值无效:使用DSum函数计算每日累计余额报错
Access查询累计余额时DSum函数“日期值无效”的解决方法
你在Access查询中创建物品每日交易后的累计余额,查询包含日期列、物品列和Bal列,使用DSum函数时反复提示“日期值无效”,原语句为:
DSum("[Bal]","Combined query","[Date]"<=#"& format([Date],"dd/mm/yyyy")&"#")
问题根源
- 引号拼接错误:原语句的字符串拼接逻辑混乱,条件部分的引号嵌套不对,导致Access无法正确解析日期条件。
- 日期格式兼容性问题:
dd/mm/yyyy格式在部分Access环境中可能被误判为月/日/年(比如系统区域设置为美式格式时),引发日期无效报错。 - 缺少物品分组条件:原语句没有限定同物品的累计,会把所有物品的Bal汇总,不符合“单个物品每日累计”的需求。
修正方案
方案1:修复DSum语句
调整引号拼接逻辑,改用Access更兼容的yyyy/mm/dd日期格式,同时加上物品匹配条件(假设物品列名为[Item]):
DSum("[Bal]", "Combined query", "[Date] <= #" & Format([Date], "yyyy/mm/dd") & "# AND [Item] = '" & [Item] & "'")
方案2:用子查询替代DSum(更稳定)
DSum在数据量大时性能较差,子查询的逻辑更清晰,稳定性更高:
SELECT t1.[Date], t1.[Item], t1.[Bal], (SELECT Sum([Bal]) FROM [Combined query] t2 WHERE t2.[Date] <= t1.[Date] AND t2.[Item] = t1.[Item]) AS 累计余额 FROM [Combined query] t1 ORDER BY t1.[Item], t1.[Date];
内容的提问来源于stack exchange,提问作者dianah kioko
相关产品推荐
相关产品推荐

