Форум программистов, компьютерный форум, киберфорум
Наши страницы

MS Access

Войти
Регистрация
Восстановить пароль
 
 
Myzon75
8 / 1 / 0
Регистрация: 09.01.2014
Сообщений: 72
#1

Фильтр по форме - MS Access

02.05.2018, 17:45. Просмотров 411. Ответов 22
Метки нет (Все метки)

Здравствуйте уважаемые форумчане!

Очень нужна Ваша помощь в настройке фильтра по форме.
Образец фильтра по которому делал был где то в примерах на форуме, сейчас уже не вспомню где.
Сам код VBA надеюсь прописал верно возможно есть ошибка в запросах для полей выбора, сам не могу разобраться помогите пожалуйста.

Фильтр находится в форме "Schet_zajvka" и работает в полях "Montag", "Nomer_zajvki" и "Data_zajvki", а вот в полях "Sostojnie_rab", "Zakazchik_zajvca", "Sostojnie_zajvki", "Prodykcij_zakaz" и "Menedger" фильтрация не происходит

помогите пожалуйста разобраться.
Базу и исходник выложил на форум, единственное в базе при открытии форм ругается на удаленные поля, которые к фильтрации отношения не имеют.
0
Вложения
Тип файла: zip test14.zip (65.5 Кб, 5 просмотров)
Тип файла: zip форум.zip (1.16 Мб, 4 просмотров)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
02.05.2018, 17:45
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Фильтр по форме (MS Access):

Фильтр по месяцам в форме по отношению к подчиненной форме с использованием кнопок - MS Access
Суть такая. Есть сводная форма. В основной части формы (главная форма) есть ФИО (поля). А в подчиненной ей - "дата посещения" и другие поля...

Как сделать фильтр в подчиненной форме по диапазону дат введенной в главной форме? - MS Access
Всем доброго дня! Такая проблема: Есть подчин/форма и и в ней поле DataZayavki. Из главной формы вводится диапазон от Dz до Dz1. Вот...

Фильтр в форме - MS Access
Помогите разобраться с фильром в форме Form1

Фильтр по форме - MS Access
Нужно найдите студентов, имеющих оценку 2 хотя бы по одному предмету Как будет выглядеть расширенный фильтр по форме студент-сессия ...

Фильтр в форме - MS Access
Помогите решить проблему. Есть форма, в ней можно выбрать в полях со списком значения и сделать по ним фильтр. фильтр применяется по...

Фильтр по форме - MS Access
Здравствуйте! нуждаюсь в вашей помощи. Дело в том, что я создала что-то типа информационной системы. По сути вы регистрируетесь в моей...

22
Eugene-LS
Эксперт MS Access
2821 / 1536 / 255
Регистрация: 05.10.2016
Сообщений: 4,229
03.05.2018, 19:11 #16
Цитата Сообщение от Myzon75 Посмотреть сообщение
как это сделать?
Ну... что-то вроде этого:
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
Private Sub FormRefilter()
Dim s$
'Контакты Like "*" & [Формы]![форма_звонки_входящ_карточка_таб1]![поиск_тел] & "*"
    
    If IsNull(Me!поиск_тел) = False Then
        s = s & " AND Контакты Like '*" & Me!поиск_тел & "*'"
    End If
    
'Дата c - по
    If IsNull(Me!дата1) = False Or IsNull(Me!дата2) = False Then
        s = s & " AND Дата_звонка Between " & _
                Format$(Nz(Me!дата1, 0), "\#mm\/dd\/yyyy\#") & _
                " And " & Format$(Nz(Me!дата2, 999999), "\#mm\/dd\/yyyy\#")  ' На Null = #11/25/4637#
    End If
    
    If s <> "" Then
        s = Mid(s, 6)
        'Debug.Print s
        Me![подчиненная форма ф_зв_вх_таб1].Form.Filter = s
        Me![подчиненная форма ф_зв_вх_таб1].Form.FilterOn = True
    Else 'Отмена фильтра
        Me![подчиненная форма ф_зв_вх_таб1].Form.Filter = ""
        Me![подчиненная форма ф_зв_вх_таб1].Form.FilterOn = False
    End If
    Debug.Print s
End Sub
1
Myzon75
8 / 1 / 0
Регистрация: 09.01.2014
Сообщений: 72
05.05.2018, 16:14  [ТС] #17
Здравствуйте Eugene-LS, спасибо за помощь. Хочу уточнить куда вешать Ваш пример кода и что в моем случае надо изменить. Я не силен в VBA но при условии если есть форма, где есть этот код то смогу возможно разобраться.
Вопросы:
FormRefilter()
'Контакты Like "*" & [Формы]![форма_звонки_входящ_карточка_таб1]![поиск_тел] & "*"
На Null = #11/25/4637#
s = Mid(s, 6)
Me![подчиненная форма ф_зв_вх_таб1].Form.Filter = s
Me![подчиненная форма ф_зв_вх_таб1].Form.FilterOn = True

что есть это?
0
Eugene-LS
Эксперт MS Access
2821 / 1536 / 255
Регистрация: 05.10.2016
Сообщений: 4,229
06.05.2018, 23:27 #18
Цитата Сообщение от Eugene-LS Посмотреть сообщение
Private Sub FormRefilter()
Цитата Сообщение от Myzon75 Посмотреть сообщение
Хочу уточнить куда вешать Ваш пример кода и что в моем случае надо изменить. Я не силен в VBA но при условии если есть форма, где есть этот код то смогу возможно разобраться.
Вопросы:
Private Sub FormRefilter() - Сама процедура пре-фильтрации (подчинённой) формы , сделано отдельной процедурой, т.к. может вызываться из нескольких мест формы.

'Контакты Like "*" & [Формы]![форма_звонки_входящ_карточка_таб1]![поиск_тел] & "*"
Коменнтарий - не помню уже зачем его оставил. Эта строка не работает (Отмечена как комментарий).

На Null = #11/25/4637#
Это комментарий к строке формирования фильтра по датам, если дата не указана - указывается далеко не возможное значение (иначе будет сложнее форматировать строку фильтра) . Тут 25.11.4637 г. используется как конец диапазона данных (От балды). Простое Ухищрение.

s = Mid(s, 6)
Поскольку мы заранее не знаем количество элементов (условий) фильтра , перед каждым пишем " AND " (Оператор объединения условий фильтра), но перед применением, первый " END " нужно удалить, иначе не сработает. Простое Ухищрение. Читайте про функцию Mid()

Me![подчиненная форма ф_зв_вх_таб1].Form.Filter = s
Me![подчиненная форма ф_зв_вх_таб1].Form.FilterOn = True

Собственно код применения фильтра в подчинённой форме.
Ищите свойства Filter и FilterOn - ничего сложного.
1
Myzon75
8 / 1 / 0
Регистрация: 09.01.2014
Сообщений: 72
12.05.2018, 16:39  [ТС] #19
Здравствуйте Eugene-LS, спасибо за отзыв и извините, что так долго отсутствовал. Разбирался с Вашим примером, но так и непонятно куда вставлять код. Я сделал вот так:

Visual Basic
1
2
3
4
5
6
7
8
9
Private Sub fld_zakazchik_zajvca_Change()
    If Len(fld_zakazchik_zajvca.Text) > 0 Then
        Me.fld_zakazchik_zajvca.RowSource = "SELECT ID_zacazchic, Nazvanie_zac FROM Zacazchic " _
            & " where Nazvanie_zac like '*" & Me.fld_zakazchik_zajvca.Text & "*'"
        Me.fld_zakazchik_zajvca.Dropdown
    Else
        Me.fld_zakazchik_zajvca.RowSource = "SELECT DISTINCT Zajvka_nomer.Zakazchik_zajvca, Zacazchic.Nazvanie_zac FROM Zacazchic INNER JOIN Zajvka_nomer ON Zacazchic.ID_zacazchic=Zajvka_nomer.Zakazchik_zajvca;"
    End If
End Sub
Но все это дело не совсем корректно работает.
Я хотел чтобы по любому символу открывался список записей, где он присутствует или в комбинации с другими символами. По факту открывается список с одной записью где есть такой символ.
Помогите пожалуйста найти причину.
0
Вложения
Тип файла: zip форум.zip (1.63 Мб, 2 просмотров)
Eugene-LS
Эксперт MS Access
2821 / 1536 / 255
Регистрация: 05.10.2016
Сообщений: 4,229
12.05.2018, 20:09 #20
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
Цитата Сообщение от Myzon75 Посмотреть сообщение
Я сделал вот так:
Если я правильно понял вашу задачку то вот вариант:
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
Private Sub fld_zakazchik_zajvca_Change()
'Тут Лучше установить Property: ComboBox.AutoExpand = False
Dim s As String, sVal As String
 
'Базовый RowSource (по умолчанию)
    s = "SELECT DISTINCT Zajvka_nomer.Zakazchik_zajvca, Zacazchic.Nazvanie_zac " & _
        "FROM Zacazchic INNER JOIN Zajvka_nomer ON Zacazchic.ID_zacazchic=Zajvka_nomer.Zakazchik_zajvca"
    
    sVal = Trim(Me!fld_zakazchik_zajvca.Text) 'Значение в поле
    If Len(sVal) > 0 Then 'Значение в поле есть - строим условие
        s = s & " WHERE Zacazchic.Nazvanie_zac LIKE '*" & sVal & "*'"
        'Debug.Print "= WHERE Zacazchic.Nazvanie_zac LIKE '*" & sVal & "*'"
    End If
    
    Me!fld_zakazchik_zajvca.RowSource = s
    Me!fld_zakazchik_zajvca.Dropdown 'Разворот списка
 
End Sub
Рефильтрацию формы, думаю, лучше делать по событию поля AfterUpdate() (После Обновления).
Visual Basic
1
2
3
Private Sub fld_zakazchik_zajvca_AfterUpdate()
    fpoisk 'Рефильтрация формы
End Sub
Ваш код - по событию Click():
Visual Basic
1
2
3
4
5
Private Sub fld_zakazchik_zajvca_Click()
'''''
fpoisk
 
End Sub
- Убрал
У поля "fld_zakazchik_zajvca" Установил свойство: AutoExpand = False
1
Вложения
Тип файла: zip форум_v02.zip (1.78 Мб, 1 просмотров)
Myzon75
8 / 1 / 0
Регистрация: 09.01.2014
Сообщений: 72
14.05.2018, 17:49  [ТС] #21
Здравствуйте Eugene-LS, завтра разберусь и напишу, заранее спасибо за отзыв и помощь.
0
Myzon75
8 / 1 / 0
Регистрация: 09.01.2014
Сообщений: 72
15.05.2018, 18:52  [ТС] #22
Здравствуйте Eugene-LS, большое Вам спасибо все работает. Могу я Вас как-то отблагодарить?

Цитата Сообщение от Eugene-LS Посмотреть сообщение
У поля "fld_zakazchik_zajvca" Установил свойство: AutoExpand = False
я так думаю что даже в моем варианте кода, возможно все работало корректно, если б я это сделал.

Цитата Сообщение от Eugene-LS Посмотреть сообщение
Рефильтрацию формы, думаю, лучше делать по событию поля AfterUpdate() (После Обновления).
Visual Basic
Выделить код
1
2
3
Private Sub fld_zakazchik_zajvca_AfterUpdate()
fpoisk 'Рефильтрация формы
End Sub
Изначально я так и делал, но выше в теме мне посоветовали сделать через
Цитата Сообщение от Eugene-LS Посмотреть сообщение
Click()
Цитата Сообщение от Eugene-LS Посмотреть сообщение
'Тут Лучше установить Property: ComboBox.AutoExpand = False
Если я все правильно понимаю это для того, чтобы не делать
Цитата Сообщение от Eugene-LS Посмотреть сообщение
У поля "fld_zakazchik_zajvca" Установил свойство: AutoExpand = False
в ручную?
0
Eugene-LS
Эксперт MS Access
2821 / 1536 / 255
Регистрация: 05.10.2016
Сообщений: 4,229
16.05.2018, 17:24 #23
Цитата Сообщение от Myzon75 Посмотреть сообщение
в ручную?
Ну да - Жёстко в свойствах объекта формы.
Можно и программно, например при загрузке формы , а зачем.
1
16.05.2018, 17:24
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
16.05.2018, 17:24
Привет! Вот еще темы с ответами:

Фильтр на форме - MS Access
Уважаемые гуру помогите. Есть ленточная форма где отражаются записи . Хочу написать фильтр для отображения записей в зависимости от...

Фильтр в форме - MS Access
привет всем) есть форма, в которой по чекбоксам суммируются данные из поля Коммент подскажите пожалуйста, как сделать так, чтобы...

Фильтр в форме - MS Access
Добрый день. Подскажите, пожалуйста, как сделать фильтр в форме? Есть форма и подчиненная форма. Для подчиненной формы выбирается...

Фильтр на форме - MS Access
Добрый день, подскажите как организовать фильтр в форме.


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
23
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru