MS Access日期范围查询异常:遗漏符合条件记录及结果不符问题
Access 查询表单日期范围筛选问题修复
当前问题梳理
- 表单包含「商品」「开始日期」「结束日期」三个文本框,用于查询
Inventory Usage表 - 现有条件逻辑错误导致两类异常:
- 仅填写日期范围、商品文本框为空时,查询无结果(期望显示该日期范围内所有记录)
- 同时填写商品和日期范围时,仅显示该商品,但部分符合日期的记录被遗漏
问题根源
- 日期筛选的OR条件逻辑错误:现有日期部分的OR条件重复了
Between判断,未处理「日期框为空时跳过筛选」的场景 - 多条件组合逻辑混乱:商品与日期的筛选条件未正确分组,导致逻辑冲突
修复方案
方法1:直接修改SQL语句
将查询的WHERE子句替换为以下逻辑,确保每个筛选条件都包含「为空则跳过」的判断,且多条件用AND正确组合:
WHERE ( [Inventory Usage].[Material] = [Forms]![Traceability_F]![Material] OR [Forms]![Traceability_F]![Material] IS NULL ) AND ( [Inventory Usage].[Date Used] BETWEEN [Forms]![Traceability_F]![StartDate] AND [Forms]![Traceability_F]![EndDate] OR ([Forms]![Traceability_F]![StartDate] IS NULL AND [Forms]![Traceability_F]![EndDate] IS NULL) )
方法2:设计视图中设置条件
若习惯用设计视图操作:
- 「商品」字段的条件行输入:
[Forms]![Traceability_F]![Material],或行输入:Is Null - 「Date Used」字段的条件行输入:
Between [Forms]![Traceability_F]![StartDate] And [Forms]![Traceability_F]![EndDate],或行输入:([Forms]![Traceability_F]![StartDate] Is Null And [Forms]![Traceability_F]![EndDate] Is Null) - 确保两个字段的条件为AND关系(设计视图中同一列的条件为AND,不同或行的条件为OR)
验证场景
- 所有文本框为空:两个OR条件的后半部分生效,返回全部记录,符合预期
- 仅填日期范围:商品条件的OR后半部分生效(跳过商品筛选),日期条件的前半部分生效,返回日期范围内所有记录
- 同时填商品和日期:两个条件的前半部分生效,返回该商品在日期范围内的所有记录
内容的提问来源于stack exchange,提问作者House of Shims
相关产品推荐
相关产品推荐

