Выберите запрос, не возвращающий записей / результатов, если другое поле пустое / пустое - PullRequest
0 голосов
/ 25 февраля 2019

У меня есть форма с различными полями, используемая для фильтрации запроса на выборку, построенная на одной таблице.Проблема заключается в том, что некоторые поля в записи (которые также являются потенциальными полями критериев) являются пустыми / пустыми, например «FirstName» и «LastName» могут быть пустыми, но есть «StudentID».

При вводе «StudentID», связанного с записью, в которой все остальные поля имеют пустое / пустое значение, запрос не возвращает запись, а вообще не возвращает никаких записей. Я бы хотел, чтобы запрос возвращал все записи, связанные с определенными критериями, несмотря на то, что другие поля были пустыми / пустыми.

В прошлом я назначал значение по умолчанию, например "NoName... "на всех новых записях, поэтому поле не пустое, и это работает, но раздражает ...

У меня пердит мозг ... Пожалуйста, дайте мне знать, если нужна дополнительная информация.TYIA

SELECT 
    SAP_RECORD_T.FirstName, 
    SAP_RECORD_T.LastName, 
    SAP_RECORD_T.StudentID,
    SAP_RECORD_T.Term, 
    SAP_RECORD_T.FileComplete, 
    SAP_RECORD_T.CampusSubmitted
FROM SAP_RECORD_T
WHERE 
    (
        ((SAP_RECORD_T.FirstName) Like "*" & [Forms]![SearchBox_F]![txtFName] & "*") 
        AND ((SAP_RECORD_T.LastName) Like "*" & [Forms]![SearchBox_F]![txtLName] & "*") 
        AND ((SAP_RECORD_T.StudentID) Like "*" & [Forms]![SearchBox_F]![StudentID] & "*") 
        AND ((SAP_RECORD_T.Term) Like "*" & [Forms]![SearchBox_F]![txtTerm] & "*") 
        AND ((SAP_RECORD_T.FileComplete) Like "*" & [Forms]![SearchBox_F]![txtFileCmplt] & "*") 
        AND ((SAP_RECORD_T.CampusSubmitted) Like "*" & [Forms]![SearchBox_F]![txtCampus] & "*")
    ) OR (
        ((SAP_RECORD_T.FirstName) Is Null) 
        AND ((SAP_RECORD_T.LastName) Is Null) 
        AND ((SAP_RECORD_T.StudentID) Is Null) 
        AND ((SAP_RECORD_T.Term) Is Null) 
        AND ((SAP_RECORD_T.FileComplete) Is Null) 
        AND ((SAP_RECORD_T.CampusSubmitted) Is Null)
    );

Ответы [ 2 ]

0 голосов
/ 25 февраля 2019
WHERE ((SAP_RECORD_T.FirstName) Like "*" & [Forms]![SearchBox_F]![txtFName] & "*") 
OR ((SAP_RECORD_T.FirstName) Is Null)
AND ((SAP_RECORD_T.LastName) Like "*" & [Forms]![SearchBox_F]![txtLName] & "*") 
OR((SAP_RECORD_T.LastName) Is Null)

Аналогичным образом, для других столбцов проверьте, соответствует ли столбец критериям ИЛИ пусто.

0 голосов
/ 25 февраля 2019

Вам необходимо изменить логику в условиях предложения WHERE.

Ваше предложение WHERE:

WHERE 
    (
        ((SAP_RECORD_T.FirstName) Like "*" & [Forms]![SearchBox_F]![txtFName] & "*") 
        AND ((SAP_RECORD_T.LastName) Like "*" & [Forms]![SearchBox_F]![txtLName] & "*") 
        AND ((SAP_RECORD_T.StudentID) Like "*" & [Forms]![SearchBox_F]![StudentID] & "*") 
        AND ((SAP_RECORD_T.Term) Like "*" & [Forms]![SearchBox_F]![txtTerm] & "*") 
        AND ((SAP_RECORD_T.FileComplete) Like "*" & [Forms]![SearchBox_F]![txtFileCmplt] & "*") 
        AND ((SAP_RECORD_T.CampusSubmitted) Like "*" & [Forms]![SearchBox_F]![txtCampus] & "*")
    ) OR (
        ((SAP_RECORD_T.FirstName) Is Null) 
        AND ((SAP_RECORD_T.LastName) Is Null) 
        AND ((SAP_RECORD_T.StudentID) Is Null) 
        AND ((SAP_RECORD_T.Term) Is Null) 
        AND ((SAP_RECORD_T.FileComplete) Is Null) 
        AND ((SAP_RECORD_T.CampusSubmitted) Is Null)
    )

Как таковые, ваши условия допускают записи, которые либо совпадают по всем условиям окна поиска, либо со всеми столбцами фильтра NULL.Вместо этого вы хотите проверить NULL для каждого столбца в отдельности перед применением фильтра.

Новая версия:

WHERE 
    (
        ( 
            ((SAP_RECORD_T.FirstName) Is Null)  
            OR ((SAP_RECORD_T.FirstName) Like "*" & [Forms]![SearchBox_F]![txtFName] & "*") 
        )
        AND (
            ((SAP_RECORD_T.LastName) Is Null) 
            OR ((SAP_RECORD_T.LastName) Like "*" & [Forms]![SearchBox_F]![txtLName] & "*")  
        )
        AND (
            ((SAP_RECORD_T.StudentID) Is Null)
            OR ((SAP_RECORD_T.StudentID) Like "*" & [Forms]![SearchBox_F]![StudentID] & "*")
        ) 
        AND (
            ((SAP_RECORD_T.Term) Is Null) 
            OR ((SAP_RECORD_T.Term) Like "*" & [Forms]![SearchBox_F]![txtTerm] & "*") 
        )
        AND (
            ((SAP_RECORD_T.FileComplete) Is Null) 
            OR ((SAP_RECORD_T.FileComplete) Like "*" & [Forms]![SearchBox_F]![txtFileCmplt] & "*") 
        )
        AND (
            ((SAP_RECORD_T.CampusSubmitted) Is Null)
            OR ((SAP_RECORD_T.CampusSubmitted) Like "*" & [Forms]![SearchBox_F]![txtCampus] & "*")
        )
    )

Примечание: эти вещи легче обнаружить, когда запрос выполнен правильноформатированный (отступ, ...).

...