|
Работа с фильтром
|
|||
---|---|---|---|
#18+
На ленточной форме1 имеются 2 выключателя,выкл1 и выкл2 (над каждым из полей1 и 2) При нажатии на выкл1 происходит фильтрация записей по полю1 (критерий-содержимое поля) Код для фильтрации следующий: ....... ....... str1 = Me.полеформы1 If (Me.vklFiltrerTipVS = 0) Then Me.FilterOn = False Else Me.Filter = "полетаблицы1='" & str1 & "'" Me.FilterOn = True End If ....... ....... При нажатии на выкл2 происходит фильтрация записей по полю2, код фильтрации аналогичен указанному выше (только вместо 1 "стоит" 2). Короче если я нажимаю ТОЛЬКО на выкл1 или выкл2,тогда происходит фильтрация так как требуется,а когда я нажимаю ПООЧЕРЕДНО на выкл1 а потом на выкл2 - фильтрация по полю1 "снимается",и в форму попадают записи независимо от положения выкл1.Т.е. фильтрация осуществляется ИЗ ТОГО, ЧТО ЕСТЬ ВООБЩЕ Как сделать так,чтобы при нажатии выкл2 происходил отбор записей из ТОГО, ЧТО ОСТАЛОСЬ (т.е. из того что осталось после нажатия выкл1),соответственно чтобы и при отжатии выкл2 снимался фильтр по полю2 и в поле зрения попадали записи соответствующие критерию выкл1 (т.е. фильтра по полю1) ? ... |
|||
:
Нравится:
Не нравится:
|
|||
10.01.2020, 15:03 |
|
Работа с фильтром
|
|||
---|---|---|---|
#18+
drafty, В цикле собирать строку фильтра forEach, For, Do..While перебрали свои поля по имени, проверили значения и MyFilter = MyFilter & " AND ИмяСтолбца = " & str1 в конце применили собранную строку для фильтра если фильтров действительно только 2, то проще прописать их руками. If...ElseIf...Else...EndIf вы уже знаете... ... |
|||
:
Нравится:
Не нравится:
|
|||
10.01.2020, 18:12 |
|
Работа с фильтром
|
|||
---|---|---|---|
#18+
drafty, Метод Application.BuildCriteria ... |
|||
:
Нравится:
Не нравится:
|
|||
10.01.2020, 18:58 |
|
Работа с фильтром
|
|||
---|---|---|---|
#18+
Игортан drafty, В цикле собирать строку фильтра forEach, For, Do..While перебрали свои поля по имени, проверили значения и MyFilter = MyFilter & " AND ИмяСтолбца = " & str1 в конце применили собранную строку для фильтра если фильтров действительно только 2, то проще прописать их руками. If...ElseIf...Else...EndIf вы уже знаете... Принцип действия первого абзаца размыто, но примерно понятен.А второй-совсем непонятно...Вопрос тогда другой-можно ли применять фильтр в фильтре(т.е. без метода переборов полей) ... |
|||
:
Нравится:
Не нравится:
|
|||
10.01.2020, 19:56 |
|
Работа с фильтром
|
|||
---|---|---|---|
#18+
Панург drafty, Метод Application.BuildCriteria Да,это похоже на то,что надо в моем случае...Thnk! ✋ ... |
|||
:
Нравится:
Не нравится:
|
|||
10.01.2020, 20:02 |
|
Работа с фильтром
|
|||
---|---|---|---|
#18+
Панург drafty, Метод Application.BuildCriteria В хэлпе говорится следующее: Тем не менее, если вы хотите создать строку условий, ссылающуюся на несколько полей, необходимо создать строки и объединить их самостоятельно. Например, если вы хотите создать критерии для фильтра, чтобы отображать записи для заказов, помещенных после 1-1-95 и для которых значение фрахта меньше $50, необходимо дважды использовать метод буилдкритериа и сцепить полученные строки. но не указан синтаксис для данного случае,везде примеры приведены для применения фильтра только по одному полю.Можно пример для случая с двумя полями (чтобы понять синтаксис)? ... |
|||
:
Нравится:
Не нравится:
|
|||
11.01.2020, 09:07 |
|
Работа с фильтром
|
|||
---|---|---|---|
#18+
drafty, а = в AND c = d ... |
|||
:
Нравится:
Не нравится:
|
|||
11.01.2020, 10:42 |
|
Работа с фильтром
|
|||
---|---|---|---|
#18+
ИВП drafty, а = в AND c = d strCriteria = BuildCriteria("OrderDate", dbDate, ">1-1-95") strMoreCriteria=BuildCriteria("Name", dbText, "Олег") strFullCriteria=strCriteria AND strMoreCriteria frm.filter=strFullCriteria 'Так? Или: frm.filter=BuildCriteria("OrderDate", dbDate, ">1-1-95") AND BuildCriteria("Name", dbText, "Олег") 'Или так? ... |
|||
:
Нравится:
Не нравится:
|
|||
11.01.2020, 11:02 |
|
Работа с фильтром
|
|||
---|---|---|---|
#18+
drafty ИВП drafty, а = в AND c = d strCriteria = BuildCriteria("OrderDate", dbDate, ">1-1-95") strMoreCriteria=BuildCriteria("Name", dbText, "Олег") strFullCriteria=strCriteria AND strMoreCriteria frm.filter=strFullCriteria 'Так? Или: frm.filter=BuildCriteria("OrderDate", dbDate, ">1-1-95") AND BuildCriteria("Name", dbText, "Олег") 'Или так? Похоже на то,что правильнее будет: frm.filter=BuildCriteria("OrderDate", dbDate, ">1-1-95") AND BuildCriteria("Name", dbText, "Олег") (Иначе в первом случае компилятор ругнется... ... |
|||
:
Нравится:
Не нравится:
|
|||
11.01.2020, 11:06 |
|
Работа с фильтром
|
|||
---|---|---|---|
#18+
drafty, имелось ввиду безо всяких Build.... ... |
|||
:
Нравится:
Не нравится:
|
|||
11.01.2020, 13:34 |
|
Работа с фильтром
|
|||
---|---|---|---|
#18+
ИВП drafty, имелось ввиду безо всяких Build.... Т.е. frm.filter =strCriteria AND strMoreCriteria или frm.filtet=strCriteria AND frm.filter=strMoreCriteria ? ... |
|||
:
Нравится:
Не нравится:
|
|||
11.01.2020, 13:37 |
|
Работа с фильтром
|
|||
---|---|---|---|
#18+
Тогда попутно такой вопрос-Как-бы написать универсальный запрос,чтобы по применению фильтра по любому из полей (каждое поле имеет свой фильтр) запрос работал корректно и в случае когда значение поля1 например содержит какое либо значение,и в случае,когда значение поля1 пустое.Это нужно,чтобы не загромождать код ветвления и типа IF-ELSE... T.e. допустим по полю2 на форме применяется фильтр.Результирующая строка в SQL выглядит примерно так Where поле2таблицы like 'поле2' Как сделать так,чтобы при применении фильтра по полю2 срабатывала и фильтрация по полю1 ? Т.е. если написать так: Where поле2таблицы like 'поле2' AND поле1таблицы like 'поле1' то в этом случае, фильтрация будет корректна,НО...если поле1 формы будет пустое - выскочит ошибка.Может есть какой спецзнак,или функция которую можно вставить в часть LIKE,чтобы в любом случае (при пустом поле1 и не пустом поле1) запрос срабатывал корректно.Сразу оговорюсь,функция NZ не пойдет,т.к. если поле1 пустое,то результатом применения этой функции будет ="",а это не одно и тоже что Null (для текстовой строки) ... |
|||
:
Нравится:
Не нравится:
|
|||
11.01.2020, 13:41 |
|
Работа с фильтром
|
|||
---|---|---|---|
#18+
drafty, А почему бы Вам вместо фильтров не изменять RecordSource формы? И не нужно городить If . ... |
|||
:
Нравится:
Не нравится:
|
|||
11.01.2020, 16:53 |
|
Работа с фильтром
|
|||
---|---|---|---|
#18+
drafty, может что-то понравится. Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24.
' для использования имплементс понадобятся ещё 2 модуля (ниже)-и там - 3 события Код: vbnet 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. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51.
... |
|||
:
Нравится:
Не нравится:
|
|||
11.01.2020, 17:24 |
|
Работа с фильтром
|
|||
---|---|---|---|
#18+
DarkMan drafty, А почему бы Вам вместо фильтров не изменять RecordSource формы? И не нужно городить If . Дело в том,что у меня изменяется Recordsource формы по одному определенному (главному) критерию,но я хочу,чтобы ещё после изменения Recordsource формы по главному критерию,можно было бы "внутри" этого Recordsource осуществлять ещё и фильтрацию по второстепенным критериям. Можно для этих целей конечно понавесить combobox для каждого из второстепенных критериев и определить события After_Update для каждого из них и на их основе опять же изменять Recordset формы,ну ту сами прикиньте-это сколько возможных вариантов надо будет прописать,если одно из combo содержит значение null или не содержит значение null (если например таких combo 5 штук)... Поэтому я думаю может применение фильтров поможет избежать такого "декартового" произведения возможных вариантов...🤔🤔🤔 ... |
|||
:
Нравится:
Не нравится:
|
|||
11.01.2020, 18:54 |
|
Работа с фильтром
|
|||
---|---|---|---|
#18+
alecko drafty, может что-то понравится. Код: vbnet 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.
' для использования имплементс понадобятся ещё 2 модуля (ниже)-и там - 3 события Код: vbnet 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. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51.
Попытаюсь извлечь из этого полезное ... |
|||
:
Нравится:
Не нравится:
|
|||
11.01.2020, 18:56 |
|
Работа с фильтром
|
|||
---|---|---|---|
#18+
alecko для использования имплементс ... |
|||
:
Нравится:
Не нравится:
|
|||
11.01.2020, 19:58 |
|
Работа с фильтром
|
|||
---|---|---|---|
#18+
sdku Гляньте это: Спасибо,в понедел на работе проанализирую ... |
|||
:
Нравится:
Не нравится:
|
|||
11.01.2020, 20:04 |
|
Работа с фильтром
|
|||
---|---|---|---|
#18+
Панург alecko для использования имплементс то что под спойлером - справочно, подробнее тс и другие могут узнать поиском по форуму, используя ключевые слова. просто плюхнуть Код: vbnet 1. 2. 3.
как то рука не поднялась. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.01.2020, 20:24 |
|
Работа с фильтром
|
|||
---|---|---|---|
#18+
drafty функция NZ не пойдет,т.к. если поле1 пустое,то результатом применения этой функции будет ="",а это не одно и тоже что Null (для текстовой строки) А можно так Код: vbnet 1. 2.
и так для каждого поля ... |
|||
:
Нравится:
Не нравится:
|
|||
11.01.2020, 23:59 |
|
Работа с фильтром
|
|||
---|---|---|---|
#18+
drafty содержит значение null или не содержит значение null (если например таких combo 5 штук)... Вот , лет 100 назад выкладывал пример в форум. :) На черыре комбобокса. Скачайте пример . Дату начала установите 010101 например ... |
|||
:
Нравится:
Не нравится:
|
|||
12.01.2020, 01:19 |
|
Работа с фильтром
|
|||
---|---|---|---|
#18+
sdku Гляньте это: https://www.sql.ru/forum/actualfile.aspx?id=22057256] Приложенный файл (формированиеСтрокиWhere.rar - 52Kb) Глянул. Я так подозреваю русская версия Access установлена? :) ... |
|||
:
Нравится:
Не нравится:
|
|||
12.01.2020, 01:23 |
|
Работа с фильтром
|
|||
---|---|---|---|
#18+
ИВП drafty функция NZ не пойдет,т.к. если поле1 пустое,то результатом применения этой функции будет ="",а это не одно и тоже что Null (для текстовой строки) А можно так Код: vbnet 1. 2.
и так для каждого поля Тогда правильнее будет так: филтр = филтр & iif (поле1 is not null, " and a = поле1", " Isnull(поле1)")... ... |
|||
:
Нравится:
Не нравится:
|
|||
12.01.2020, 07:11 |
|
Работа с фильтром
|
|||
---|---|---|---|
#18+
DarkMan drafty содержит значение null или не содержит значение null (если например таких combo 5 штук)... Вот , лет 100 назад выкладывал пример в форум. :) На черыре комбобокса. Скачайте пример . Дату начала установите 010101 например Спасибо,гляну! ... |
|||
:
Нравится:
Не нравится:
|
|||
12.01.2020, 07:12 |
|
|
start [/forum/topic.php?fid=45&fpage=22&tid=1610288]: |
0ms |
get settings: |
8ms |
get forum list: |
12ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
33ms |
get topic data: |
12ms |
get forum data: |
2ms |
get page messages: |
59ms |
get tp. blocked users: |
1ms |
others: | 14ms |
total: | 147ms |
0 / 0 |