У меня есть база данных только с 1 таблицей, в этой таблице более 27 полей, и не все из них будут содержать значение (некоторые будут пустыми). У меня есть кнопка («поиск тревоги») в форме навигации, которая выполняет поиск по нескольким полям, есть 6 различных полей, по которым пользователь может искать, и пользователь может использовать от 1 до 6 критериев одновременно (см. Фото).
.
Например, я могу выполнять поиск только по имени или по имени, тегу и т. Д., И я хочу, чтобы все записи, в которых есть эти элементы, отображались, даже если в этой записи есть другие пропущенные поля.
Ниже приведен код, который выполняется при нажатии кнопки.
varI = DLookup("Tag", "tblAlarms", "Tag Like '*" & Forms![frmHomePage]!inputTag & "*'")
varJ = DLookup("Name", "tblAlarms", "Name Like '*" & Forms![frmHomePage]!inputName & "*'")
varX = DLookup("Plant_Identification_Number", "tblAlarms", "Plant_Identification_Number Like '*" & Forms![frmHomePage]!inputPlantID & "*'")
varY = DLookup("Priority", "tblAlarms", "Priority Like '*" & Forms![frmHomePage]!inputPriority & "*'")
varZ = DLookup("Group", "tblAlarms", "Group Like '*" & Forms![frmHomePage]!inputGroup & "*'")
varK = DLookup("Classification", "tblAlarms", "Classification Like '*" & Forms![frmHomePage]!inputClass & "*'")
If Not IsNull(varI) And Not IsNull(varJ) And Not IsNull(varX) And Not IsNull(varY) And Not IsNull(varZ) And Not IsNull(varK) Then
DoCmd.OpenForm "frmAlarms", acNormal, "", "Tag Like ""*"" & [Forms]![frmHomePage]![inputTag] & ""*"" and Name Like ""*"" & [Forms]![frmHomePage]![inputName] & ""*"" and Plant_Identification_Number Like ""*"" & Forms![frmHomePage]!inputPlantID & ""*"" and Priority Like ""*"" & Forms![frmHomePage]!inputPriority & ""*"" and Group Like ""*"" & Forms![frmHomePage]!inputGroup & ""*"" and Classification Like ""*"" & Forms![frmHomePage]!inputClass & ""*""", acEdit, acNormal
DoCmd.Close acForm, "frmHomePage", acSaveNo
Me.Visible = False
Else
MsgBox "0 Search Results Were Found!"
Me.Visible = True
End If
Моя проблема в том, что я не могу запустить запрос / поиск (строка DoCmd.OpenForm), если в таблицах данных отсутствуют поля.
Я попытался удалить условие «Если», чтобы оно запускало команду независимо от того, отсутствует поле или нет, однако ms access не возвращает никаких записей, если запись не содержит данных во всех полях. Это можно обойти?
Я думал о следующем:
Наличие операторов «If» для выполнения различных запросов в зависимости от введенных данных, но с 6 различными полями для поиска из 720 различных комбинаций.
Построение строки запроса (строка DoCmd.OpenForm в коде), зависящей от входных данных поиска, но я не могу придумать, как в коде узнать, когда ставить '&' между ними.
При попытке кнопки просто выполнить запрос, но опять же проблема в том, что если в записи отсутствуют поля, эта запись не будет отображаться, даже если критерии поиска соответствуют. Например, если я ищу все записи с тегом = 1234, эти записи будут отображаться только в том случае, если все 27+ полей в этой записи содержат значение.
Можно ли поставить "н / п" во все пустые поля, но есть ли способ сделать это автоматически? Поскольку в этой базе данных есть пользовательская запись, и было бы идеально, если бы она автоматически заполняла пустые поля "n / a" при создании новой записи. Хотя это сделает таблицу / данные немного запутанными, поэтому предпочтительнее обойти поисковый запрос и пропустить поля.
Любая помощь будет высоко ценится! Заранее спасибо.