Форум программистов, компьютерный форум, киберфорум
Microsoft Access
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.97/35: Рейтинг темы: голосов - 35, средняя оценка - 4.97
3 / 3 / 0
Регистрация: 17.02.2013
Сообщений: 57

Применение несколько фильтров оновременно

22.07.2013, 20:44. Показов 7037. Ответов 15
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Вопрос наверное часто задаётся, я поискал но как то не нашёл ответа. Помогите написать код или подскажите в какой теме посмотреть. Собственно вопрос- В форме [ФормаОтчётАдминМашинРезка] необходимо организовать фильтрацию по четырем полям выбор промежутка между датами, выбор сотрудника и выбор вида резки. Применить один фильтр через код у меня получалось. В других формах обходился макросами. А здесь засада, по не опытности у меня длинные названия таблиц и полей (в построителе выражений оказалось не более 255 символов) дописать макрос не удалось. Я решил проблему фильтром в запросе, но в дальнейшем хотелось бы иметь больше возможностей. Заранее всем спасибо за помощь и внимание!
Вложения
Тип файла: rar 10.07.20.rar (361.0 Кб, 70 просмотров)
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
22.07.2013, 20:44
Ответы с готовыми решениями:

Применение двух и больше фильтров сразу
Народ, возможно ли применение сразу нескольких фильтров ? К примеру, по году и месяцу? Выходит только по одному из параметров.. подскажите...

Несколько фильтров в форме макросом
Не нашел нужного мне решения в имеющихся темах форума. Дано: Форма со списком услуг и выпадающими списками (вверху) в роли фильтров. ...

Несколько фильтров по значению в табличной форме
Access 2010. Есть табличная форма, доступная только для просмотра. В этой форме пользователи должны иметь возможность применять фильтры по...

15
3357 / 1776 / 83
Регистрация: 05.08.2010
Сообщений: 4,471
23.07.2013, 08:34
Вы бы выложили в формате mdb файл, не все имеют офис >2003.
0
 Аватар для Андрэич
2842 / 774 / 41
Регистрация: 20.05.2012
Сообщений: 2,055
23.07.2013, 09:25
Цитата Сообщение от SG312 Посмотреть сообщение
В форме [ФормаОтчётАдминМашинРезка] необходимо организовать фильтрацию по четырем полям выбор промежутка между датами, выбор сотрудника и выбор вида резки.
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
private sub КнопкаРезультаты_click()
 
dim s as string, sOrder as string
s="select * from table where 1=1"
 
if len(me!Date1 & "")>0 then s=s & " and date1 > #" & format(me!date1,"mm\/dd\/yy") & "#"
if len(me!Date2 & "")>0 then s=s & " and date2 < #" & format(me!date1,"mm\/dd\/yy") & "#"
if len(me!staff & "")>0 then s=s & " and staff = " & me!staff: sOrder = me!staff.name
if len(me!rezka & "")>0 then s=s & " and rezka = " & me!rezka: sOrder = me!staff.name
s=s & iif(len(sOrder & "")>0," order by " & sOrder,"")
 
msgbox s
 
end sub
1
3 / 3 / 0
Регистрация: 17.02.2013
Сообщений: 57
23.07.2013, 18:38  [ТС]
"Вы бы выложили в формате mdb файл, не все имеют офис >2003."
Как то сразу не подумал. Сейчас попробовал пере сохранить access не даёт говорит что используются особенности нынешнего формата

Добавлено через 20 минут
Спасибо за код буду побывать!
0
3 / 3 / 0
Регистрация: 17.02.2013
Сообщений: 57
23.07.2013, 20:33  [ТС]
Андрэич, Спасибо за код, если можно небольшие пояснения для новичка, в общих чертах понятно но не владея должными знаниями кое что на угад. Не могу разобраться где поля которые фильтруются, а где по которым задаётся фильтр. В общих чертах если можно. Ещё раз спасибо
0
 Аватар для Андрэич
2842 / 774 / 41
Регистрация: 20.05.2012
Сообщений: 2,055
24.07.2013, 01:41
Ошибся. Вот эту измененную строку нужно вставить вместо восьмой
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
private sub КнопкаРезультаты_click()
 
dim s as string, sOrder as string
s="select * from table where 1=1"
 
if len(me!Date1 & "")>0 then s=s & " and date1 > #" & format(me!date1,"mm\/dd\/yy") & "#"
if len(me!Date2 & "")>0 then s=s & " and date2 < #" & format(me!date1,"mm\/dd\/yy") & "#"
if len(me!rezka & "")>0 then s=s & " and rezka = " & me!rezka: sOrder = me!rezka.name
if len(me!staff & "")>0 then s=s & " and staff = " & me!staff: sOrder = me!staff.name
s=s & iif(len(sOrder & "")>0," order by " & sOrder,"")
 
msgbox s
 
end sub
В код подставьте ваши названия полей

Файл не смотрел, нет Акса >2003
1
3 / 3 / 0
Регистрация: 17.02.2013
Сообщений: 57
25.07.2013, 21:28  [ТС]
Андрэич, Извините за несообразительность, подскажите куда какие поля подставить. В форме поля по которым задаются фильтры [ДатаС], [ДатаПо], [ВыборСотрудника] и [ВыборРезки]. Поля которые необходимо фильтровать [ДатаЗаказа], [Сотрудник] и [ВидРезки] и если возможно с пояснениями к коду. Ещё раз спасибо.
0
 Аватар для Андрэич
2842 / 774 / 41
Регистрация: 20.05.2012
Сообщений: 2,055
25.07.2013, 23:31
Цитата Сообщение от SG312 Посмотреть сообщение
В форме поля по которым задаются фильтры [ДатаС], [ДатаПо], [ВыборСотрудника] и [ВыборРезки]. Поля которые необходимо фильтровать [ДатаЗаказа], [Сотрудник] и [ВидРезки] и если возможно с пояснениями к коду. Ещё раз спасибо.
Я имел ввиду filter не в буквальном его выражении, попробуйте:
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
private sub КнопкаРезультаты_click()
 
dim s as string, sOrder as string
s="select * from table where 1=1"
 
if len(me![ДатаС] & "")>0 then s=s & " and [ДатаС] > #" & format(me![ДатаС],"mm\/dd\/yy") & "#"
if len(me![ДатаПо] & "")>0 then s=s & " and [ДатаПо] < #" & format(me![ДатаПо],"mm\/dd\/yy") & "#"
if len(me![ВидРезки]  & "")>0 then s=s & " and [ВидРезки]  = " & me![ВидРезки] : sOrder = me![ВидРезки].name
if len(me![Сотрудник] & "")>0 then s=s & " and [Сотрудник] = " & me![Сотрудник]: sOrder = me![Сотрудник].name
s=s & iif(len(sOrder & "")>0," order by " & sOrder,"")
 
'msgbox s
 
me.recordsource=s: me.requery
 
end sub
Данный код вставить на процедуру Нажатие кнопки на форме с именем КнопкаРезультаты: конструктор форм - выделить кнопку - свойства - процедура обработки событий - Нажатие кнопки - справа кнопка " ... "
2
0 / 0 / 0
Регистрация: 17.02.2018
Сообщений: 1
17.02.2018, 21:59
Надо в фильтре "ЗадатьФильтр" прописать условия отбора через "And".
0
Эксперт MS Access
 Аватар для alvk
7459 / 4592 / 302
Регистрация: 12.08.2011
Сообщений: 14,380
20.02.2018, 03:52
А перед вашим сообщением пять лет назад как-то без and решили?
0
4089 / 1469 / 401
Регистрация: 07.08.2013
Сообщений: 3,671
20.02.2018, 05:31
как-то видел как гуру по аксу творил такую конструкцию

"текст " + [значение] & "тест " + [значение]
интересный эффект получается
0
 Аватар для amd48
845 / 475 / 80
Регистрация: 18.05.2016
Сообщений: 1,267
Записей в блоге: 5
20.02.2018, 11:10
Цитата Сообщение от snipe Посмотреть сообщение
интересный эффект получается
Он скорее неожиданный будет.
Плюс - это математическая операция. Она складывает числа. По случайности в складываемых переменных могут оказаться строковые значения и услужливый VBA соединит их по аналогии с &. А в фильтрах я даже представить себе не могу, что он там будет складывать. Потому, что логическое сложение условий для фильтров делается через AND.
VBA, конечно, может что угодно складывать. И не такое видали. Но результат будет всегда неожиданный.
0
Эксперт MS Access
 Аватар для ltv_1953
17536 / 7288 / 1663
Регистрация: 21.06.2012
Сообщений: 13,957
20.02.2018, 11:58
Цитата Сообщение от amd48 Посмотреть сообщение
Но результат будет всегда неожиданный.
Изучайте Поиск по данным разного вида и далее - никаких "неожиданностей" не будет.
0
Модератор
Эксперт MS Access
6231 / 2909 / 707
Регистрация: 12.06.2016
Сообщений: 7,839
20.02.2018, 18:07
Цитата Сообщение от amd48
Он скорее неожиданный будет.
Плюс - это математическая операция. Она складывает числа. По случайности в складываемых переменных могут оказаться строковые значения и услужливый VBA соединит их по аналогии с &. А в фильтрах я даже представить себе не могу, что он там будет складывать. Потому, чтологическое сложение условий для фильтров делается через AND.
VBA, конечно, может что угодно складывать. И не такое видали. Но результат будет всегда неожиданный.
В данном случае результат определяется следующим образом:
- если части соединены плюсом, то если хотя бы одна из частей Null, результат Null,
если же ни одна часть не Null, получаем конкатенацию всех частей;
Например: ("дом " + [Дом] + ",") & ("кв." + [Квартира])
- если части соединены амперсандом, результатом будет конкатенация всех частей, в том числе и "пустот".

Так что, ничего неожиданного не будет.
0
 Аватар для amd48
845 / 475 / 80
Регистрация: 18.05.2016
Сообщений: 1,267
Записей в блоге: 5
22.02.2018, 15:33
А если все части будут числами, то получится арифметическая сумма. И всегда результат разный, т.к. тип входных параметров может оказаться разным. Ведь вы пытаетесь "складывать" строки, надеясь, что
- Ну это же строки, а не числа. Что может пойти не так?
Посему я останусь при мнении:
1. конкатенация - это операция над строками. Под строкой понимается любая последовательности символов, в том числе и цифры и пустоты. Делается конкатенация с помощью &
2. складывание чисел - операция над числами. Под числами понимаются только последовательности цифр. Строки (буквы, знаки пунктуации и пустоты), если они там и оказались, отбрасываются и принимаются за 0. Складывание делается с помощью +.

Определив для себя, что и каким способом вы будете складывать или конкатенировтаь, вы оградите себя от дальнейшей неразберихи, если входные данные ВНЕЗАПНО будут неожиданного формата. Иначе у вас получится индусский код. А к нему относится к примеру решение задачи, входит ли число в диапазон от 0 до 9 включительно, измерением длины строки. Если строка длиннее одного символа, то число входит в этот диапазон. "Изящно", то тупо.
0
Модератор
Эксперт MS Access
6231 / 2909 / 707
Регистрация: 12.06.2016
Сообщений: 7,839
22.02.2018, 16:12
Лучший ответ Сообщение было отмечено alvk как решение

Решение

Цитата Сообщение от amd48 Посмотреть сообщение
А если все части будут числами, то получится арифметическая сумма
Уверены?
Visual Basic
1
2
? "1" + "2"
12
Цитата Сообщение от amd48 Посмотреть сообщение
И всегда результат разный, т.к. тип входных параметров может оказаться разным.
С чего бы?
Инструменты следует применять сознательно.
Цитата Сообщение от amd48 Посмотреть сообщение
если входные данные ВНЕЗАПНО будут неожиданного формата
Разработчик ВНЕЗАПНО позабыл, данными какого типа манипулирует?
Пусть сходит в отпуск.
Цитата Сообщение от amd48 Посмотреть сообщение
Иначе у вас получится индусский код. А к нему относится к примеру решение задачи, входит ли число в диапазон от 0 до 9 включительно, измерением длины строки. Если строка длиннее одного символа, то число входит в этот диапазон. "Изящно", то тупо.
Эти фантазии мне не приписывайте, будьте любезны.

Добавлено через 7 минут
Цитата Сообщение от amd48 Посмотреть сообщение
входит ли число в диапазон от 0 до 9 включительно, измерением длины строки. Если строка длиннее одного символа, то число входит в этот диапазон. "Изящно", то тупо.
Это ни изящно, ни тупо, а просто неправильно.
Ответ неверный.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
22.02.2018, 16:12
Помогаю со студенческими работами здесь

Применение фильтров к graphics
Написал свою библиотек графического интерфейса с разделенным функционалом и представлением. Логика такая - есть компонент, он наследует...

Применение фильтров к фото
как к данному коду прикрутить меню выбора накладки фильтров на фото в точности: 1) накладку серого if (mode == 0): for i in...

Применение фильтров ОС UNIX
Привет, хотел попросить помочь с задачей. Нужно найти в подкаталоге файл, содержащий наибольшее количество строк. Я так понимаю надо...

Применение фильтров на изображение
Здравствуйте. Пишу программу для работы с массивом пикселей на bitmap. На форме есть picturebox в котором на bitmap помещено изображение....

Несколько фильтров в QTableView
подскажите алгоритм фильтрации, если имеется 2 qlineedit, 3 radiobutton, 1 checkbox нужно суммировать результат всех фильтров ...


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

Или воспользуйтесь поиском по форуму:
16
Ответ Создать тему
Новые блоги и статьи
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 https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11680&amp;d=1772460536 Одним из. . .
Реалии
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. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru