Как сделать множественный выбор выпадающим и найти подчиненную форму в MS Access 2016 - PullRequest
1 голос
/ 10 января 2020

Итак, у меня есть выпадающий список. Я хотел бы отфильтровать критерии поиска в подчиненной форме. В моей родительской форме у меня есть поле со списком [cboTicketStatus]. моя подчиненная форма [SubHelpdeskTickets] и исходный объект [sfrm_Helpdesk_Ticket_Filter_Search]. В моем поле со списком [cboTicketStatus] у меня есть несколько элементов для выбора: Открыть, Закрыто, Работа в процессе, Удержание, Требуется утверждение, Утверждено. Я хотел бы иметь возможность выбрать несколько элементов, а затем фильтр подчиненной формы по элементам, выбранным в [cboTicketStatus]. Затем, если не выбрано ни одного элемента, я бы хотел показать все элементы из таблицы [tbl_Helpdesk_Ticket_Tracker]. Я не уверен, как написать код для изменения источника записи, чтобы сделать это.

Function SearchCriteria()
Dim strDepartment As String
Dim strTicketNumber As String
Dim strTicketStatus As String
Dim strStartDate As String
Dim strEndDate As String
Dim task As String
Dim strCriteria As String

If IsNull(Me.cboDepartments) Then
    strDepartment = "[Comptroller Department] like '*'"
Else
    strDepartment = "[Comptroller Department] = '" & Me.cboDepartments.Column(1) & "'"
End If
If IsNull(Me.cboTicketNumber) Then
    strTicketNumber = "[Helpdesk Ticket Number] like '*'"
Else
    strTicketNumber = "[Helpdesk Ticket Number] = '" & Me.cboTicketNumber.Column(1) & "'"
End If
If IsNull(Me.cboTicketStatus) Then
    strTicketStatus = "[Status of Ticket] like '*'"
Else
    strTicketStatus = "[Status of Ticket] = '" & Me.cboTicketStatus.Column(1) & "'"
End If
If IsNull(Me.txtStartDate) Then
    strStartDate = "[Date Opened] like '*'"
Else
    strStartDate = "([Date Opened] >= #" & Me.txtStartDate & "#)"
End If
If IsNull(Me.txtEndDate) Then
    strEndDate = "[Date Opened] like '*'"
Else
    strEndDate = "([Date Opened] <= #" & Me.txtEndDate & "#)"
End If
strCriteria = strDepartment & "And" & strTicketNumber & "And" & strStartDate & "And" & strEndDate & "And" & strTicketStatus
    task = "Select * from tbl_Helpdesk_Ticket_Tracker where " & strCriteria
    Me.SubHelpdeskTickets.Form.RecordSource = task
    Me.SubHelpdeskTickets.Form.Requery
End Function

Мой код, который я сейчас использую, работает только с одним выбором.

обновил код для того, что вы редактировали. Я получаю еще одну ошибку. Правильно ли я его собираю?

    strTicketStatus = "[TicketStatus] like '*'"
Else
    strTicketStatus = "[TicketStatus] = "
    Dim i As Long
    'Dim selectedStatus As String
    Dim firstCondition As Boolean: firstCondition = True
    For i = 0 To Me.cboTicketStatus.ListCount - 1
        If Me.cboTicketStatus.Selected(i) = True Then
             selectedStatus = Me.cboTicketStatus.ItemData(i)
             strTicketStatus = strTicketStatus & IIf(Not firstCondition, " OR ", "") & _
                "'" & selectedStatus & "'"
        firstCondition = False
    End If
Next i
End If```

[![First View of All tickets][1]][1]


[![after selecting an option in the dropdown][2]][2]


[![view after event is fired][3]][3]


  [1]: https://i.stack.imgur.com/1vXqT.jpg
  [2]: https://i.stack.imgur.com/i079f.jpg
  [3]: https://i.stack.imgur.com/egUj8.jpg

1 Ответ

0 голосов
/ 11 января 2020

Примерно так:

strTicketStatus = "[Status of Ticket] IN ("
Dim i as Long
Dim firstCondition as boolean: firstCondition = true
For i = 0 to Me.cboTicketStatus.ListCount - 1
    if Me.cboTicketStatus.Selected(i) = True then
        selectedStatus = Me.cboTicketStatus.ItemData(i) 
        strTicketStatus = strTicketStatus  & iif(not firstCondition, ", ", "") & "'" & selectdStatus & "'"
        firstCondition = false
    End If
Next i
strTicketStatus = strTicketStatus & ")"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...