|
Последовательная фильтрация
|
|||
---|---|---|---|
#18+
Уважаемые коллеги! Пусть дана некоторая таблица Т. Рассмотрим фильтр Ф1: set filter to Поле1 = Значение1 .and. Поле2 = Значение2 .and. ... .and. ПолеК = ЗначениеK go top Каждому должно быть понятно, что в результате получим некоторую таблицу ТФ1. Эксперимент показывает, что в результате выполнения последовательности команд set filter to Поле1 = Значение1 go top set filter to Поле2 = Значение2 go top ... set filter to ПолеК = ЗначениеK go top НЕ получается таблица ТФ1. Вопросы: 1. Почему это так? 2. Как написать последовательность указанного типа, чтобы результат был ТФ1. Для чего это нужно? Чтобы логическое выражение в фильтре можно было делать произвольной длины, например. Да и работать намного удобнее. И т. д. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.02.2012, 18:52 |
|
Последовательная фильтрация
|
|||
---|---|---|---|
#18+
> Автор: UAP > НЕ получается таблица ТФ1. > > Вопросы: > > 1. Почему это так? Не получается, т.к. каждый фильтр "сбрасывает" предыдуший фильтр > 2. Как написать последовательность указанного типа, чтобы результат был ТФ1. Перечислять все условия фильтрации в условии. Это код DblClick ListBox'а. В классе Header по Click'у строится курсор для "автофильтра" по этому столбцу и присваивается как RecordSource ListBox'у из которого выбирают значение и по этому значению ставится фильтр. Т.к. это грид, то фильтров может быть много, по разным столбцам, которые нужно учесть :) Через ListBox.Tag передается имя поля в курсоре и имя столбца в таблице Код: sql 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. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80. 81. 82. 83. 84. 85. 86. 87. 88. 89. 90. 91. 92. 93. 94. 95. 96. 97. 98. 99. 100. 101. 102. 103. 104. 105. 106. 107. 108. 109. 110. 111. 112. 113. 114. 115. 116. 117. 118. 119. 120. 121. 122. 123. 124. 125. 126. 127. 128. 129. 130. 131. 132. 133. 134. 135. 136. 137. 138. 139. 140. 141. 142. 143. 144. 145. 146. 147. 148. 149. 150. 151. 152. 153. 154. 155. 156. 157. 158. 159. 160. 161. 162.
Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
09.02.2012, 19:12 |
|
Последовательная фильтрация
|
|||
---|---|---|---|
#18+
Уважаемый Игорь Горбонос! Может все таки есть некий прием, позволяющий не сбрасывать предидущий фильтр? ... |
|||
:
Нравится:
Не нравится:
|
|||
09.02.2012, 22:19 |
|
Последовательная фильтрация
|
|||
---|---|---|---|
#18+
Уважаемый Игорь Горбонос! Может все таки есть некий прием, позволяющий не сбрасывать предидущий фильтр? ... |
|||
:
Нравится:
Не нравится:
|
|||
09.02.2012, 22:24 |
|
Последовательная фильтрация
|
|||
---|---|---|---|
#18+
А, ну если вам без фильтра - ни жить, ни быть... наверное, имелось в виду следующее: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9.
... |
|||
:
Нравится:
Не нравится:
|
|||
10.02.2012, 00:54 |
|
Последовательная фильтрация
|
|||
---|---|---|---|
#18+
AndreTM! Ваше предложение заманчиво... Я тоже пытаюсь "накапливать" фильтрующее выражение. Но. При большом количестве условий не налетим ли мы на ограничение в количестве символов на длину оператора, равную 254 символа. Конечно, я могу ошибаться. Если так, то поправьте меня. Более того. Представляет интерес ведение "протокола" наложения фильтров с целью ОТМЕНИТЬ наложенный только что "частичный" фильтр и точно так же его ВЕРНУТЬ (произвольное количество отмен и возвращений). С вожделением жду ответов коллег! ... |
|||
:
Нравится:
Не нравится:
|
|||
10.02.2012, 10:38 |
|
Последовательная фильтрация
|
|||
---|---|---|---|
#18+
UAP, с таким количеством фильтров вы скорей налетите на замедление работы программы. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.02.2012, 12:00 |
|
Последовательная фильтрация
|
|||
---|---|---|---|
#18+
В фоксе нет накопительных фильтров. Обычно хватает подхода предложенного AndreTM Тут есть ограничение по длине строки, только 254 или больше точно не скажу. Никогда не надо было много. Можно вызывать SET FILTER свою функцию, а там уже прописать все что надо. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.02.2012, 12:01 |
|
Последовательная фильтрация
|
|||
---|---|---|---|
#18+
Господа !!! (Звоню в колокольчик...) Давайте говорить по сути. Мне нужно решить задачу, а не поддерживать светскую беседу ... Извините ... ... |
|||
:
Нравится:
Не нравится:
|
|||
10.02.2012, 12:14 |
|
Последовательная фильтрация
|
|||
---|---|---|---|
#18+
UAPМне нужно решить задачу, а не поддерживать светскую беседу ... Извините ... Ну так решай и конкретно спрашивай что не решается. Мы за тебя твои гипотезы тестить должны? UAPПри большом количестве условий не налетим ли мы на ограничение в количестве символов на длину оператора, равную 254 символа. Конечно, я могу ошибаться. Если так, то поправьте меня. Взял да проверил. Вопрос на 2 минуты. Лично мне просто интересно сколько чего такого юзер должен навыбирать чтобы это не влезло в 254 символа. UAPПредставляет интерес ведение "протокола" наложения фильтров с целью ОТМЕНИТЬ наложенный только что "частичный" фильтр и точно так же его ВЕРНУТЬ (произвольное количество отмен и возвращений). В чем проблема? Создал таблицу/переменную/объект и веди туда протокол. Вобщем описывай что там у тебя за задача, как она решена и что конкретно тебе не нравится в этом решении. Если рассуждать в общих словах - то получается только светская беседа. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.02.2012, 12:34 |
|
Последовательная фильтрация
|
|||
---|---|---|---|
#18+
Накапливай условия фильтра в символьную строку <...> Затем делай макроподстановку SET FILTER TO &<...> ... |
|||
:
Нравится:
Не нравится:
|
|||
10.02.2012, 14:09 |
|
Последовательная фильтрация
|
|||
---|---|---|---|
#18+
UAPПри большом количестве условий не налетим ли мы на ограничение в количестве символов на длину оператора, равную 254 символа.Что-то я не заметил в описании SET FILTER ограничения на длину условия... Если же вас интересует ограничение длины строки в макроподстановке - то читайте . UAPПредставляет интерес ведение "протокола" наложения фильтров с целью ОТМЕНИТЬ наложенный только что "частичный" фильтр и точно так же его ВЕРНУТЬ (произвольное количество отмен и возвращений)Как по вашему, зачем я в примере множу скобки? Немного подумав, вы поймёте, что в этом случае анализ самого выражение фильтра позволит... ... |
|||
:
Нравится:
Не нравится:
|
|||
10.02.2012, 23:19 |
|
Последовательная фильтрация
|
|||
---|---|---|---|
#18+
AndreTM! Мне понятно Ваше решение. Но. Предположим, что у первоначальной таблицы есть "сопровождающая" таблица с одним символьным полем, в котором каждая новая запись появляется с изменением фильтра. То есть "приращение" фильтрующего выражения записывается в новую запись. Это та структура о которой Вы говорите. Понятно, что если через .and. "просуммировать" все записи, то получим текущий фильтр. Если "просуммировать" все записи за исключением последней, то это "вернет" нас на шаг назад. И так далее. И вот тут возникает возможное ограничение на длину фильтрующего выражения. Как быть? Именно это наводит на мысль не "накапливать" выражение, а налагать последовательно фильтры. Однако и это не годится. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.02.2012, 13:48 |
|
Последовательная фильтрация
|
|||
---|---|---|---|
#18+
Ничего не понял в ваших рассуждениях... Какая вторая таблица? Зачем? Я предлагаю использовать только выражение фильтра. И всё. На основе анализа самого выражения - можно всегда найти все "шаги" добавления. И покажите мне ссылку на ограничение длины выражения фильтра (вернее, на размер этого ограничения). Из официального руководства. Если же вы про длину символьной строки - то для девятки она равна 16Мб. Не считая вешеописанного приема. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.02.2012, 21:04 |
|
Последовательная фильтрация
|
|||
---|---|---|---|
#18+
AndreTM! Безусловно Вы правы. Просто хочется ДО разработки фрагмента как можно больше продумать тонкостей. Интересно найти альтернативу. Ведь писать плохие программы легко и быстро. ... По поводу альтернативы. Вероятно, на меня опять обрушатся с критикой, но я позволю себе предложить такой вариант. В начале фрагмента напишем: set dele on Если нам нужен фильтр с логическим условием L1, то при альтернативном подходе это все равно что dele all for !L1 Затем "фильтруем согласно логического условия L2" dele all for !L2 Вот тут-то НЕ нужно делать так dele all for !(L1.and.L2), поскольку set dele on и т.д. В конце концов делаем recall all. Таблицы у меня маленькие. Время обработки НЕ критично. Конечно есть риск уничтожить таблицу... Интересно Ваше мнение обо всем вышеизложенном. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.02.2012, 21:51 |
|
Последовательная фильтрация
|
|||
---|---|---|---|
#18+
Еще раз ничего не понял... Каким образом SET FILTER соотносится с условиями и областью действия в операторе DELETE? Вы чего вообще пытаетесь достичь? Расскажите уж "ваше понимание" вопроса простым русским доходчивым языком Кстати, !L1 and !L2 <=> !(L1 or L2). Так что ваши рассуждения - вообще из области "своёпонятия"... Судя по всему, вы там придумали себе некий "мегасуперпринцип", который проистёк из "вашей интуиции". Я уж не знаю, что и посоветовать - то ли практику по языку наработать, то ли теорию множеств почитать ... |
|||
:
Нравится:
Не нравится:
|
|||
12.02.2012, 22:18 |
|
Последовательная фильтрация
|
|||
---|---|---|---|
#18+
AndreTM! set filter to L1.and.L2 "эквивалентен" dele all for !( L1.and.L2) (Я очень хорошо знаю, что !( L1.and.L2) <=> !L1.or.!L2 - дело не в этом) Наличие set dele on (определяет, что команды не обрабатывают записи, помеченные на удаление) делает "эквивалентными" дествия dele all for !( L1.and.L2) и пару dele all for !L1 dele all for !L2 Это позволяет очень упростить программу. Не нужно разбирать длинные выражения, наталкиваться на ограничения ... ... |
|||
:
Нравится:
Не нравится:
|
|||
12.02.2012, 22:52 |
|
Последовательная фильтрация
|
|||
---|---|---|---|
#18+
Вы собираетесь фильтровать записи с помощью пометки на удаление? Нет, конечно, метод - но защем?? Только потому, что есть такое дело, как пометка? ... |
|||
:
Нравится:
Не нравится:
|
|||
12.02.2012, 22:57 |
|
Последовательная фильтрация
|
|||
---|---|---|---|
#18+
AndreTM! Да. Собираюсь фильтровать записи с помощью пометки на удаление. Зачем? Потому, что я не могу сообразить как того же результата достичь последовательной фильтрацией да еще с короткими логическими выражениями. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.02.2012, 23:04 |
|
Последовательная фильтрация
|
|||
---|---|---|---|
#18+
Не стОит так делать... Вот в этом случае у вас и получится, что нужны всякие "дополнительные базы", "логи"... да и не наш это метод - вы думаете, вам это даст быстродействие? Что, вам нужен просто рабочий пример "с последовательной фильтрацией" на больших таблицах, что ли? С помощью исползования выражения фильтра? Так это не ко мне - я на Фоксе сейчас уже не пишу. Хотя и могу попробовать изобразить... ... |
|||
:
Нравится:
Не нравится:
|
|||
12.02.2012, 23:10 |
|
Последовательная фильтрация
|
|||
---|---|---|---|
#18+
AndreTM! Я, конечно, сам напишу этот фрагмент. Просто, я стараюсь услышать своих собеседников, даже если они путают теорию множеств и математическую логику. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.02.2012, 23:18 |
|
Последовательная фильтрация
|
|||
---|---|---|---|
#18+
Ну, что же вы хотите - воскресенье, вечер... Да и не путаем - логика там как раз по теории множеств, как бы не хотелось обратного авторset filter to L1.and.L2 "эквивалентен" dele all for !( L1.and.L2)от этом и говорит... А в целом - путь указан, и я рАтую именно за него. Но решать - вам. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.02.2012, 00:20 |
|
Последовательная фильтрация
|
|||
---|---|---|---|
#18+
AndreTM! Спасибо ... ... |
|||
:
Нравится:
Не нравится:
|
|||
13.02.2012, 00:40 |
|
Последовательная фильтрация
|
|||
---|---|---|---|
#18+
UAPПонятно, что если через .and. "просуммировать" все записи, то получим текущий фильтр. Если "просуммировать" все записи за исключением последней, то это "вернет" нас на шаг назад. И так далее. И вот тут возникает возможное ограничение на длину фильтрующего выражения. Ты проверил какое это именно ограничение? или так и продолжаешь философствовать о черной кошке в темной комнате? UAPКак быть? Именно это наводит на мысль не "накапливать" выражение, а налагать последовательно фильтры. Однако и это не годится. Я же уже предлагал сделать свою функцию-фильтр, примерно так: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23.
Думаю суть кода понятна, дальше сам допиливай под свою задачу. PS Вариант с генерацией строки и подстановкой ее в SET FILTER будет работать быстрее. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.02.2012, 07:39 |
|
Последовательная фильтрация
|
|||
---|---|---|---|
#18+
прочитал мельком, так просто идея.. можно просто ввести поле фильтра (f_iltr), и проставлять метки на накопительные условия.., в конце когда бесконечный цикл накопительных условий закончится, поставить фильр по этому полю... но может я что-то не догоняю и поэтому не прав.. :-) ... |
|||
:
Нравится:
Не нравится:
|
|||
13.02.2012, 07:56 |
|
|
start [/forum/topic.php?fid=41&msg=37657072&tid=1583844]: |
0ms |
get settings: |
11ms |
get forum list: |
16ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
42ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
66ms |
get tp. blocked users: |
1ms |
others: | 257ms |
total: | 416ms |
0 / 0 |