多条件DCount函数返回记录数异常,请求技术排查
问题分析与解决方案
嘿,我一眼就揪出问题根源了——逻辑运算符优先级导致的条件分组错误!
问题原因
在VBA和Access SQL的逻辑运算规则里,AND的优先级比OR高。你原本的代码写法会被Access自动解析成:
[Check] = FALSE OR (DateDiff('d', [CheckDate], Date()) > 365 And [Room] = '指定房间值')
这就完全偏离了你原本的逻辑:现在只要[Check]为FALSE,不管Room是否匹配都会被统计进来,而不是你想要的「([Check]为FALSE 或者 CheckDate超过一年)同时Room匹配」的效果。
修正后的代码
只需要给OR连接的两个条件加上括号,强制让它们先完成判断,再和AND的条件结合:
counter = DCount("*", "tbl1", "([Check] = FALSE OR DateDiff('d', [CheckDate], Date()) > 365) And [Room] = '" & Forms!frmSelect.txbSelect.Value & "'") checkIndicator.Caption = "(" & counter & ")" & " available!"
验证小技巧
你可以先把修正后的条件放到Access查询里测试,确保逻辑正确:
- 新建一个查询,数据源选择
tbl1 - 在条件行输入:
([Check] = FALSE OR DateDiff('d', [CheckDate], Date()) > 365) And [Room] = '你的测试房间值' - 运行查询看返回的记录数是否符合预期,确认没问题后再替换到VBA代码里。
内容的提问来源于stack exchange,提问作者WKI
相关产品推荐
相关产品推荐

