Combobox-фильтрация для вывода списка не работает должным образом - PullRequest
0 голосов
/ 17 мая 2018

У меня есть несколько элементов управления (Combobox, я называю DDL), которые я использую в качестве фильтров для динамического запроса, как показано ниже.

У меня есть регион, фильтр разделения - и выпадающие списки BCI / BCV / ABC / etc.

Когда я выбираю регион и деление, окно списка вывода корректно отфильтровывает все, кромеЭТО регион / подразделения. Хорошо.

Проблема возникает, когда я использую другие DDL, ABD / BCI / и т.д. ... они не отфильтровываются правильно, и я думаю, что это с моими и /или пункты ниже.

Может ли кто-нибудь увидеть что-то вопиющее или указать мне правильное направление, чтобы получить это так, чтобы каждый элемент управления и элемент ddl отфильтровывали данные, для которых он предназначен, - при этом сохраняя их в формате, в котором сам SQL является частьюстрока, как в моем примере?

Private Sub goBtn_Click()
          strSQL = "SELECT [account_number], [BCI_Amt], [BCV_Amt],[ABC_Amt], [other_Amt], " & _
        "[BCI_Amt]+[BCV_Amt]+[ABC_Amt]+[other_MRC_Amt], Division_Name, Region_Name, " & _
        "Tier, Unit_ID, Name, Description_2 " & _
        "FROM dbo_ndw_bc_subs " & _
        "WHERE DivisionDDL = [Division_Name] and RegionDDL = [Region_Name] " & _
        " and ( [BCI_Ind] = CheckBCI.value or [BCV_Ind] = CheckBCV.value or [ABC_Ind] = CheckABC.value " & _
        " or BCIServiceDDL = [Tier]" & _
        " or BCVServiceDDL = [Description_2]" & _
        " or ABCServiceDDL = [Unit_ID]  )" & _
        "ORDER BY 6 asc"
    Me.output1.RowSource = strSQL
    End Sub

Один из управляющих кодов DDL поля со списком.Есть флажки, которые делают поле со списком видимым или невидимым.

Private Sub CheckBCV_Click()
  If Me.CheckBCV = vbTrue Then 
     Me.BCVServiceDDL.Visible = True
     Me.BCVServiceDDL = "Select:"
     strSQL = "SELECT  Distinct subs.[Description_2] FROM dbo_ndw_bc_subs "
     Me.BCVServiceDDL.RowSource = strSQL
     Me.BCVServiceDDL.Requery
  Else
     Me.BCVServiceDDL.Visible = False
     Me.BCVServiceDDL = ""
  End If
End Sub

Редактировать: Добавлен дополнительный код в первый блок кода для контекста и обновлены некоторые комментарии.

Чтобы повторить пункт моего вопроса - Поскольку некоторые из работ DDL, как и ожидалось, а другие нет.Это в разделе И / ИЛИ, где у меня есть проблема - или я вынужден сделать оператор IF / IIF в выборе.(И если я сделаю это ЕСЛИ решение - как это будет включено в строку, как у меня сейчас, я не видел пример этого в своем исследовании резолюции).

1 Ответ

0 голосов
/ 17 мая 2018

Я думаю, что ваш верхний пример кода должен выглядеть примерно так:

Private Sub goBtn_Click()
    Dim strSQL As String
    Dim strWhere As String 
    Dim strOp As String 

    strSQL = "SELECT [account_number], [BCI_Amt], [BCV_Amt],[ABC_Amt], [other_Amt], " & _
        "[BCI_Amt]+[BCV_Amt]+[ABC_Amt]+[other_MRC_Amt], Division_Name, Region_Name, " & _
        "Tier, Unit_ID, Name, Description_2 " & _
        "FROM dbo_ndw_bc_subs "

    strWhere = ""
    strOp = ""
    If Not IsNull(Me.DivisionDDL.Value) Then 
        strWhere = strWhere & strOp & "(Division_Name = """ & Me.DivisionDDL.Value & """)"
        strOp = " And "
    End If
    If Not IsNull(Me.RegionDDL.Value) Then 
        strWhere = strWhere & strOp & "(Region_Name = """ & Me.RegionDDL.Value & """)"
        strOp = " And "
    End If
    If Me.CheckBCI.Value Then 
        strWhere = strWhere & strOp & "(Tier = """ & Me.BCIServiceDDL.Value & """)"
        strOp = " And "
    End If
    If Me.CheckBCV.Value Then 
        strWhere = strWhere & strOp & "(Description_2 = """ & Me.BCVServiceDDL.Value & """)"
        strOp = " And "
    End If
    If Me.CheckABC.Value Then 
        strWhere = strWhere & strOp & "(Unit_ID = """ & Me.ABCServiceDDL.Value & """)"
        strOp = " And "
    End If

    If Len(strWhere) > 0 then 
        strSQL = strSQL & " WHERE " & strWhere
    End If
    strSQL = strSQL & " ORDER BY 6 asc"

    Me.output1.RowSource = strSQL

End Sub

Это более многословно, но гораздо ближе к правильному.PS Я догадался, что все значения являются строками.Если нет, удалите кавычки вокруг нестроковых значений.

...