Форум программистов, компьютерный форум, киберфорум
Microsoft Access
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.88/40: Рейтинг темы: голосов - 40, средняя оценка - 4.88
8 / 1 / 0
Регистрация: 09.01.2014
Сообщений: 78

Фильтр по форме

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

Студворк — интернет-сервис помощи студентам
Здравствуйте уважаемые форумчане!

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

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

помогите пожалуйста разобраться.
Базу и исходник выложил на форум, единственное в базе при открытии форм ругается на удаленные поля, которые к фильтрации отношения не имеют.
Вложения
Тип файла: zip test14.zip (65.5 Кб, 23 просмотров)
Тип файла: zip форум.zip (1.16 Мб, 19 просмотров)
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
02.05.2018, 17:45
Ответы с готовыми решениями:

Фильтр по форме по нескольким логическим полям с использованием кнопки Общий фильтр
Здравствуйте! Есть простая таблица и созданная форма. Идея в том, чтобы ставя галки осуществлять поиск (с помощью кнопки общий фильтр...

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

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

22
4089 / 1469 / 401
Регистрация: 07.08.2013
Сообщений: 3,671
02.05.2018, 18:39
вы нашли грабли связанные с полями подстановок и присоединенными полями
т.е. например манагер - вы видите фамилию а на самом деле там число и в фильтре указываете что отбирать надо по тексту
тут надо просто посмотреть как в базе обозначены типы полей в таблицах и привести все в соответствие

с присоединенными полями в полях со списком тоже важно не заблудиться
точнее с тем какую информацию вы выдергиваете из поля со списком
по сути в поле со списком видим одну информацию а вытянуть можем совершенно другую и сам контрол может выдавать другую информацию
на что обратить внимание
смотрим на источник строк а именно между словами Select и From
в этом месте идет перечисление столбцов которые хапает (захватывает) ПолеСоСписком
Последовательность перечисления очень важна
далее смотрим присоединенный столбец его номер в последовательности - отсчет начинается от 1
(под vba обращение к первому столбцу будет .Column(0) )
ну а далее опять проверяем что выдает ПолеСоСписком (тип данных) и сверяем с типом данных которые нужны в поле фильтра
1
Модератор
Эксперт MS Access
 Аватар для shanemac51
12231 / 5078 / 814
Регистрация: 07.08.2010
Сообщений: 14,937
Записей в блоге: 4
02.05.2018, 23:00
Лучший ответ Сообщение было отмечено Myzon75 как решение

Решение

для списков надо применять событие Click
и список возвращает числовое значение

Visual Basic
1
2
3
4
5
6
7
8
9
10
Private Sub fld_menedger_Click()
'''''
fpoisk
 
End Sub
 
S2 = "" & Me.fld_menedger.Column(0)
If Len(S2) > 0 Then
S1 = S1 & " AND [Menedger]  =" & S2 & ""
End If
1
8 / 1 / 0
Регистрация: 09.01.2014
Сообщений: 78
03.05.2018, 18:17  [ТС]
Здравствуйте! Спасибо за рекомендации, но я знаю про это и пытался изменять и запросы в полях с списком и .Column(0)
0
Эксперт MS Access
 Аватар для Eugene-LS
13172 / 5869 / 1504
Регистрация: 05.10.2016
Сообщений: 16,488
03.05.2018, 18:31
Цитата Сообщение от Myzon75 Посмотреть сообщение
Спасибо за рекомендации, но я знаю про это и пытался изменять и запросы в полях с списком и .Column(0)
Так что конкретно не получается у вас, уж уточните пожалуйста.
1
8 / 1 / 0
Регистрация: 09.01.2014
Сообщений: 78
03.05.2018, 18:37  [ТС]
возможно ли сделать, чтобы в полях списков фильтра после фильтрации изменялись и значения в списках, а не представлялись все возможные значения.

Добавлено через 5 минут
Eugene-LS, были ошибки в коде благодаря подсказке shanemac51, вопрос решился но есть вопросы которые изложил в предыдущем посте.
0
Модератор
Эксперт MS Access
 Аватар для shanemac51
12231 / 5078 / 814
Регистрация: 07.08.2010
Сообщений: 14,937
Записей в блоге: 4
03.05.2018, 18:37
Цитата Сообщение от Myzon75 Посмотреть сообщение
возможно ли сделать, чтобы в полях списков фильтра после фильтрации изменялись и значения в списках, а не представлялись все возможные значения.
.
только писанины будет намного больше
1
8 / 1 / 0
Регистрация: 09.01.2014
Сообщений: 78
03.05.2018, 18:42  [ТС]
Писанина в плане VBA?
0
Модератор
Эксперт MS Access
 Аватар для shanemac51
12231 / 5078 / 814
Регистрация: 07.08.2010
Сообщений: 14,937
Записей в блоге: 4
03.05.2018, 18:43
Цитата Сообщение от Myzon75 Посмотреть сообщение
Писанина в плане VBA?
естественно

я бы видимо прицепила все справочники и искала бы побуквенно в текстовых полях
вам все равно понадобится этот прием для поиска в наименовании товара

кстати встречный вопрос
--это производственная задача
--или студенческая
1
Эксперт MS Access
 Аватар для Eugene-LS
13172 / 5869 / 1504
Регистрация: 05.10.2016
Сообщений: 16,488
03.05.2018, 18:46
Цитата Сообщение от Myzon75 Посмотреть сообщение
Писанина в плане VBA?
Ага!
Ну не сильно много - всего пара - четвёрка страниц (экранных) кода на форму, и называется это всё гнусное дело "Согласование значений"
1
8 / 1 / 0
Регистрация: 09.01.2014
Сообщений: 78
03.05.2018, 18:47  [ТС]
тогда возможно ли сделать, чтоб при вводе в поле с списком, значения фильтровались и предлагались варианты на выбор
0
Эксперт MS Access
 Аватар для Eugene-LS
13172 / 5869 / 1504
Регистрация: 05.10.2016
Сообщений: 16,488
03.05.2018, 18:54
Цитата Сообщение от Myzon75 Посмотреть сообщение
тогда возможно ли сделать, чтоб при вводе в поле с списком, значения фильтровались и предлагались варианты на выбор
Можно и в вариациях - что конкретно, по событиям, вы хотите?
0
8 / 1 / 0
Регистрация: 09.01.2014
Сообщений: 78
03.05.2018, 19:00  [ТС]
Это производственная задача. Благодаря Вашему форуму я сделал базу которую сейчас улучшаю и допиливаю самостоятельно.

Добавлено через 4 минуты
допустим я знаю, что в названии заказчика есть часть слова (мега), тогда при вводе в поле с списком (заказчик) появлялись варианты, где эта часть присутствует.
0
Эксперт MS Access
 Аватар для Eugene-LS
13172 / 5869 / 1504
Регистрация: 05.10.2016
Сообщений: 16,488
03.05.2018, 19:01
Цитата Сообщение от Myzon75 Посмотреть сообщение
допустим я знаю, что в названии заказчика есть часть слова (мега), тогда при вводе в поле с списком (заказчик) появлялись варианты, где эта часть присутствует.
Тут обычно используют оператор Like ...
0
8 / 1 / 0
Регистрация: 09.01.2014
Сообщений: 78
03.05.2018, 19:02  [ТС]
как это сделать?
0
Эксперт MS Access
 Аватар для Eugene-LS
13172 / 5869 / 1504
Регистрация: 05.10.2016
Сообщений: 16,488
03.05.2018, 19:11
Цитата Сообщение от 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
8 / 1 / 0
Регистрация: 09.01.2014
Сообщений: 78
05.05.2018, 16:14  [ТС]
Здравствуйте 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
Эксперт MS Access
 Аватар для Eugene-LS
13172 / 5869 / 1504
Регистрация: 05.10.2016
Сообщений: 16,488
06.05.2018, 23:27
Цитата Сообщение от 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
8 / 1 / 0
Регистрация: 09.01.2014
Сообщений: 78
12.05.2018, 16:39  [ТС]
Здравствуйте 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
Но все это дело не совсем корректно работает.
Я хотел чтобы по любому символу открывался список записей, где он присутствует или в комбинации с другими символами. По факту открывается список с одной записью где есть такой символ.
Помогите пожалуйста найти причину.
Вложения
Тип файла: zip форум.zip (1.63 Мб, 16 просмотров)
0
Эксперт MS Access
 Аватар для Eugene-LS
13172 / 5869 / 1504
Регистрация: 05.10.2016
Сообщений: 16,488
12.05.2018, 20:09
Лучший ответ Сообщение было отмечено Myzon75 как решение

Решение

Цитата Сообщение от 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
Вложения
Тип файла: zip форум_v02.zip (1.78 Мб, 33 просмотров)
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
12.05.2018, 20:09
Помогаю со студенческими работами здесь

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

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка библиотек: SDL3, Box2D, FreeType, SDL3_ttf, SDL3_mixer и SDL3_image из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru