Программирование MsAccess, VB, VBA

  

© am 1999-2012

Добро пожаловать, незнакомец! [вход]   

|  Домой   |   Новости   |   Гостевая   |   Форумы   |   Поиск   |   Страницы Авторов   |

Форумы/     Сообщений: всего:55832, сегодня:0, за неделю:28, за месяц:129, за год:129
Использование СУБД Ms Access, программирование на VB, VBA
Данный форум посвящен различным вопросам создания приложений баз данных на платформах - Microsoft Access, Microsoft Visual Basic.

Public forum

  Home Ответить подписка В избранное Из избранного

составной фильтр andlara   
На главной форме 3 флажка, в подчиненной форме надо отфильтровать записи по состоянию флажков, каждый флажок = фильтр по определенному полю. Два поля я сумела,а вот три?
Private Sub Флажок1_AfterUpdate()
Dim MyFilter As String
Dim MyVar1 As String
Dim MyVar2 As String
If Флажок21 = True Then
   MyVar1 = "[Остаток] <> 0"
Else
   MyVar1 = " "
End If

If ПоКлиенту = True Then
    MyVar2 = "[Клиент] = Forms![СостояниеЗаказа]![Клиент]"
Else
    MyVar2 = " "

End If
If MyVar1 = " " And MyVar2 = " " Then
   Forms![СостояниеЗаказа]![подчиненная форма Состояние].Form.FilterOn = False  'Отмена предыдущего фильтра ежели применялся
End If
If MyVar1 <> " " And MyVar2 = " " Then
  MyFilter = MyVar1
End If
If MyVar1 = " " And MyVar2 <> " " Then
  MyFilter = MyVar2
End If
If MyVar1 <> " " And MyVar2 <> " " Then
  MyFilter = MyVar1 + " and " + MyVar2
End If


03.12.2007 13:16

Re:составной фильтр Профиль пользователяNeAs   
Попробуйте так, например:
strCriteria AS String
For i=1 To 3
   Select Case i
   case 1
      if Flag1 Then
        strCriteria = "MyField1 =" & Me!FieldData1
      End If
   Case 2
      if Flag2 Then
        strCriteria = "MyField2 =" & Me!FieldData2
      End If
   Case 3
      if Flag3 Then
        strCriteria = "MyField3 =" & Me!FieldData3
      End If
   End Select
   if Nz(strCriteria,vbNullString) <> vbNullString then
      strCriteria = strCriteria & " AND " & strCriteria
   End If
Next
if nz(strCriteria,vbNullString) <> vbNullString then
   Me.Filter = strCriteria
   Me.FilterOn = True
Else
   Me.FilterOn = False
End If

03.12.2007 14:42

Re:Re:составной фильтр andlara   
strCriteria = "MyField1 =" & Me!FieldData1
так: strCriteria = "Остаток <>" & 0 ?
У меня фиксированные значения фильтров при включенном соответствующем флажке, но при попытке склеить в одну строку через AND ругается, если пустой фильтр(не включен один из соответствующих флажков)
03.12.2007 16:43

Re:Re:составной фильтр andlara   
картинка
Присоединенный файл:zakaz.jpg (Размер: 76320 байт, Скачиваний:150)
03.12.2007 16:49

Re:составной фильтр Профиль пользователяМиша   
s=""
If Флажок1 Then s = s + " And Таблица.Поле1 = " & ПолеФормы1
If Флажок2 Then s = s + " And Таблица.Поле2 = " & ПолеФормы2
If Флажок3 Then s = s + " And Таблица.Поле3 = " & ПолеФормы3
If s<>"" Then s=Mid(s,6) 'при необходимости: удалить первый AND
03.12.2007 17:21

Re:Re:составной фильтр andlara   
нет поля,есть кокретное значение фильтра
03.12.2007 17:35

Re:Re:Re:составной фильтр Профиль пользователяNeAs   
andlara писал:
так: strCriteria = "Остаток <>" & 0 ?

Нет. Для данного выражения надо "Остаток <> 0"
Me!FieldData1 - это имя поля на форме фактическое значение которого надо использовать в фильтре.
Если используются переменные то нужно так:
strCriteria = "MyField1 = " & MyVar1
03.12.2007 17:50

Re:составной фильтр Профиль пользователяМиша   
А Forms![СостояниеЗаказа]![Клиент] - не поле?
03.12.2007 19:41

Re:Re:составной фильтр andlara   
СПАСИБО ВСЕМ!
Точно, один из фильтров поле, но включается по флажку. Я попробую и отпишусь. Видимо получится комбинация из предложенных вариантов.
Я нашла на форуме вот такой вариант
Dim MyFilter As String
Dim i As Byte
Dim s As String
  For i = 1 To 3
    If Controls("Флажок" & i) Then
      s = s + "and " + Controls("Флажок" & i).Tag
      Debug.Print s
      
    End If
  Next i
  MyFilter = s
Debug.Print MyFilter

Прописала в дополнительных свойствах флажка фильтры, но...получаю AND
and [Клиент] Like ' * '
and Склад =0
в результате.
Может "+" поменять на "&" ?

04.12.2007 09:13

Re:составной фильтр Профиль пользователяМиша   
Именно по этой причине и требуется:

Next i
If s<>"" Then s=Mid(s,6) 'при необходимости: удалить первый AND
MyFilter = s
04.12.2007 13:31

Re:Re:составной фильтр Профиль пользователяNeAs   
Если я правильно разобрался, то так должно работать
Private Sub Флажок1_AfterUpdate()
    Dim zl_strFilter As String, zl_strCriteria As String
    Dim zl_blnFilter As Boolean
    
    If Me!Флажок21 = True Then
        zl_strCriteria = "[Остаток] <> 0"
    Else
        zl_strCriteria = vbNullString
    End If
    
    zl_strFilter = zl_strCriteria
    
    If Me!ПоКлиенту = True Then
        zl_strCriteria = "[Клиент] = " & Me![Клиент]
    Else
        zl_strCriteria = vbNullString
    End If
    
    If zl_strFilter <> vbNullString Then
        If zl_strCriteria <> vbNullString Then
            zl_strFilter = zl_strFilter & " AND " & zl_strCriteria
        End If
        zl_blnFilter = True
    ElseIf zl_strCriteria <> vbNullString Then
        zl_strFilter = zl_strFilter
        zl_blnFilter = True
    End If
    
    With Me![подчиненная форма Состояние].Form
        If zl_blnFilter Then .Filter = zl_strFilter
        'Отмена или включение фильтра
        .FilterOn = zl_blnFilter
    End With

End Sub


PS. Лучше, чтобы контролы и переменные имели бы более осмысленные имена
04.12.2007 15:09

Re:Re:Re:составной фильтр andlara   
Я попробовала этот вариант , но пишет "Введите значение параметра "БСК"(название клиента). Почему?, ведь фильтр получился правильным и debug печатает
[Остаток] <> 0 AND [Клиент] = БСК
04.12.2007 15:53

Re:составной фильтр andlara   

Next i
If s<>"" Then s=Mid(s,6) 'при необходимости: удалить первый AND
MyFilter = s

Добавила и получила фильтр клад =0
04.12.2007 16:02

Re:составной фильтр andlara   
СПАСИБО!СПАСИБО!СПАСИБО!СПАСИБО!


Супер, заработало
Private Sub Флажок3_AfterUpdate()
On Error GoTo Err_Флажок3_AfterUpdate
Dim MyFilter As String
Dim i As Byte
Dim s As String
  For i = 1 To 3
    If Controls("Флажок" & i) Then
      s = s + "and " + Controls("Флажок" & i).Tag
 ' Debug.Print s
      
    End If
  Next i
  If s <> "" Then s = Mid(s, 5)
  MyFilter = s
Debug.Print MyFilter
  ' Forms![СостояниеЗаказа]![подчиненная форма Состояние].Form.FilterOn = False  'Отмена предыдущего фильтра ежели применялся
    
Forms![СостояниеЗаказа]![подчиненная форма Состояние].Form.Filter = MyFilter
Forms![СостояниеЗаказа]![подчиненная форма Состояние].Form.FilterOn = True


Exit_Флажок3_AfterUpdate:
    Exit Sub

Err_Флажок3_AfterUpdate:
    MsgBox Err.Description
    Resume Exit_Флажок3_AfterUpdate
    
End Sub

04.12.2007 16:37

Re:Re:Re:Re:составной фильтр Профиль пользователяNeAs   
andlara писал:
пишет "Введите значение параметра "БСК"(название клиента). Почему?, ведь фильтр получился правильным

У Вас наверное, значение поля [Клиент] - текстовое, поэтому в фильтре надо писать так
zl_strCriteria = "[Клиент] = '" & Me![Клиент] & "'"

04.12.2007 16:56

Re:составной фильтр andlara   
Да, текстовое. Спасибо.
Я теперь могу передать этот фильтр на кнопку для печати отобранных записей?
05.12.2007 09:21

Re:Re:составной фильтр Профиль пользователяNeAs   
Попробуйте
05.12.2007 10:02

  Home Ответить подписка В избранное Из избранного

  Rambler's Top100TopList