【问题标题】:SQL Query: Excluding Records by Empty Fields using Check BoxesSQL 查询:使用复选框按空字段排除记录
【发布时间】:2018-02-16 23:37:45
【问题描述】:

我已经全力以赴,我很确定这是我没有看到的简单的东西。

我有一个我正在设置用于测试的 MS-Access 数据库。现在,它非常简单,只有 2 个表、3 个查询和 2 个表单。

到目前为止,我遇到的问题是我正在尝试使用复选框(而不是单选按钮)来驱动查询。每个复选框应在选中时过滤掉该字段中不具有空值或空值的任何项目。我附上了一张表格的屏幕截图,显示了下面的 5 个复选框。

目前,只要我不选择多个复选框,查询就可以正常工作(所以不正确,真的)。在图像中,您可以看到它在选中相应框时显示带有空字段的记录(这不是我想要的)。理想情况下,它应该在检查所有内容后仅在屏幕截图中显示 Jamey Smith 的记录。

然后,例如,选择 CCS 和 MICCS,它只会显示 Ben Ward 记录。

这是 SQL 代码:

SELECT 
    EmployeeInfo.[Last Name], 
    EmployeeInfo.[First Name], 
    EmployeeInfo.TWICS, 
    EmployeeInfo.CCS, 
    EmployeeInfo.MICCS, 
    EmployeeInfo.OSHA10, 
    EmployeeInfo.OSHA30
FROM 
    EmployeeInfo
WHERE (((EmployeeInfo.TWICS) Is Not Null)) 
AND (([Forms]![TestForm2]![optTWICS])=True)
OR (((EmployeeInfo.CCS) Is Not Null)
AND (([Forms]![TestForm2]![optCCS])=True)
OR ((EmployeeInfo.MICCS) Is Not Null)
AND (([Forms]![TestForm2]![optMICCS])=True)
OR ((EmployeeInfo.OSHA10) Is Not Null)
AND (([Forms]![TestForm2]![optOSHA10])=True)
OR ((EmployeeInfo.OSHA30) Is Not Null)
AND (([Forms]![TestForm2]![optOSHA30])=True));

我确信我的布尔逻辑被搞砸了。我尝试了几种方法,将 OR 更改为 AND,以及将 AND 嵌入 IIF 语句中(然后将 OR 更改为 ANDS)。嵌入的 IIF 语句的工作原理是,如果每个框都被选中并且记录的所有字段都不为空,它们只会显示一条记录。

我真的很感激这里的指针。我整个晚上都在苦苦挣扎,我知道我会在我的大脑中某个地方度过我的周末。我也在 VBA 中尝试过,但它更麻烦并且有同样的问题。

【问题讨论】:

    标签: sql ms-access ms-access-2016


    【解决方案1】:

    我不太确定复选框值的 Access 语法,但我确实在您的查询中看到了一些已修复的逻辑错误。这可能是你想要做的。

    SELECT 
        EmployeeInfo.[Last Name]
        , EmployeeInfo.[First Name]
        , EmployeeInfo.TWICS
        , EmployeeInfo.CCS
        , EmployeeInfo.MICCS
        , EmployeeInfo.OSHA10
        , EmployeeInfo.OSHA30
    FROM EmployeeInfo
    WHERE (EmployeeInfo.TWICS IS NOT NULL AND Forms![TestForm2]![optTWICS] = True)
        OR (EmployeeInfo.CCS IS NOT NULL AND Forms![TestForm2]![optCCS] = True)
        OR (EmployeeInfo.MICCS IS NOT NULL AND Forms![TestForm2]![optMICCS] = True)
        OR (EmployeeInfo.OSHA10 IS NOT NULL AND Forms![TestForm2]![optOSHA10] = True)
        OR (EmployeeInfo.OSHA30 IS NOT NULL AND Forms![TestForm2]![optOSHA30] = True);
    

    【讨论】:

    • 感谢您的清理工作,但我仍然无法让查询正常运行。 Access 代码运行良好,我认为 SQL 查询中的嵌入式逻辑不正确。我能够复制我想要的唯一方法是在查询屏幕上做一个“不等于空白”。将此应用于多个列正是我想要的,因为我只想显示每个日期字段没有空字段的记录。
    猜你喜欢
    • 1970-01-01
    • 2012-01-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多