none
Столкнулся с проблемой в Access 2003 RRS feed

  • Общие обсуждения

  • Здравствуйте!
    Столкнулся с проблемой в Access 2003, Есть Запрос и поле со списком (на формочке). Нужно чтобы в запросе отображались данные соответствующие выбранному значению в поле со списком (это работает).
    Если в поле со списком ничего не выбрано, должны отображаться все записи (не работает)
    Условие на отбор:

    IIf(IsNull(([Forms]![Стартовая]![ПолеПоискГод]));([Год].[Id_God]) Like "*";([Forms]![Стартовая]![ПолеПоискГод]))

    Если подставить за место « ([Год].[Id_God]) Like "*" » любое значение из списка, запрос корректно отработает в соответствии с данным значением.
    Подскажите пожалуйста, как решить данную проблему.
    8 ноября 2007 г. 5:37

Все ответы

  • Я строю фильтр на основе нескольких списков. При этом, добавляю в список строку "Все", означающую отсутствие условий фильтрации по данному параметру. Но, можно и анализировать IsNull, хотя это не всегда верно.

     

    По результатам выбора формируется строка фильтра. А вот если выбор не сделан или выбрана строка "Все", соответствующая позиция фильтра просто остается пустой. Соответственно, если ни один из параметров не выбран, значит ВСЯ строка фильтра просто остается пустой.

     

    Кроме этого, я добавил кнопку "Удалить фильтр", которая очищает полностью условия фильтрации.

     

    Образец кода

    Sub CreateActiveFilter()
    Dim strFilterQuery
    Dim strFilter1, strFilter2, strFilter3

    strFilter1 = ""
    strFilter2 = ""
    strFilter3 = ""
    strFilterQuery = ""

    Me.FilterOn = False


    If Me.FilterList.Value > 0 Then
        Select Case Me.FilterList.Value
            Case 1

                strFilter1 = "(vwPublicIndexPassive.fFolderExist=0)"
            Case 2

                strFilter1 = "(vwPublicIndexPassive.fFolderExist=1)"
            Case 3

                strFilter1 = "(vwPublicIndexPassive.MustBeCreated=True)"
        End Select
    End If

     


    If Not IsNull(Me.FilterTypeRes.Value) Then
        strFilter2 = "(ResTypePath ALike " + Chr(34) + Me.FilterTypeRes.Value + Chr(34) + ")"
    End If


    If Not IsNull(Me.FilterDepRes.Value) Then
        strFilter3 = "(Depart ALike " + Chr(34) + Me.FilterDepRes.Value + Chr(34) + ")"
    End If

     

    If Len(strFilter1) > 0 Or Len(strFilter2) > 0 Or Len(strFilter3) > 0 Then
        strFilterQuery = "("
        If Len(strFilter1) > 0 Then
            strFilterQuery = strFilterQuery + strFilter1
        End If
        If Len(strFilter2) > 0 Then
            If Len(strFilterQuery) > 1 Then
                strFilterQuery = strFilterQuery + " AND "
            End If
            strFilterQuery = strFilterQuery + strFilter2
        End If
        If Len(strFilter3) > 0 Then
            If Len(strFilterQuery) > 1 Then
                strFilterQuery = strFilterQuery + " AND "
            End If
            strFilterQuery = strFilterQuery + strFilter3
        End If
        strFilterQuery = strFilterQuery + ")"
       
        Me.Filter = strFilterQuery
        Me.FilterOn = True
    Else
        Me.Filter = ""
        Me.FilterOn = False
    End If

    Me.Requery

    End Sub

     

     

    Все работает.

     

    8 ноября 2007 г. 6:46
  • Спасибо за ответ Andrey Kudrjashov !

    а если поле цифравое, то как добавить значение "Все"?

    8 ноября 2007 г. 9:12