|
|
|
CR. Множественный LIKE
|
|||
|---|---|---|---|
|
#18+
Всем привет! Ребят, подскажите как справиться с такой проблемой: в качестве входного параметра используется текстовое поле, заполненное следующием образом "%11%,%22%,%05%" и так далее. Задача состоит в том, чтобы отфильтровать датасет с этим условием, но поскольку множественного LIKE не бывает, то нужно составить условие "field LIKE '%11%' OR field LIKE '%22%' OR...". Я в редакторе формул пытаюсь составить множественное условие (в цикле разбираю параметр и в итоге вывожу в качестве формулы выбора строку типа "and field LIKE .. OR field LIKE .. "), но CR его игнорирует. Подскажите, есть ли более удачные варианты решения? Да, источником данных является запрос. Спасибо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.05.2011, 11:10 |
|
||
|
CR. Множественный LIKE
|
|||
|---|---|---|---|
|
#18+
whyt, Скобки нужно ставить: and ( field LIKE .. OR field LIKE .. " ) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.05.2011, 07:33 |
|
||
|
CR. Множественный LIKE
|
|||
|---|---|---|---|
|
#18+
MAYAKOV_SV , спасибо за совет, но наверно я не правильно объяснился. Попробую подробнее. Для того, чтобы задать формулу выбора я использую Мастер выбора, после этого захожу в редактор формул и пишу следующий код Параметр следующего вида - "%15%,%16%". Я не буду перегружать пример разбором этого параметра. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.05.2011, 10:04 |
|
||
|
CR. Множественный LIKE
|
|||
|---|---|---|---|
|
#18+
Тут простой программисткий финт: Код: plaintext 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. 1) храню переменную результата сравнения result , и после выполнения кода пишу result; , что означает возрат результата. 2) т.к. условие OR, то пишу выход Exit While если найдено хотя бы одно совпадения. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.05.2011, 10:29 |
|
||
|
CR. Множественный LIKE
|
|||
|---|---|---|---|
|
#18+
whyt_ а true т.к. воспринимает цикл while..do, который успешно завершился.. У меня false = -1, а true = 1. Не знаю, как это сработает, может false = 0, попробовать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.05.2011, 10:31 |
|
||
|
CR. Множественный LIKE
|
|||
|---|---|---|---|
|
#18+
Спасибо за предложенный вариант, но ,к сожалению, не могу его проверить, т.к. при проверке кода возникает ошибка "Отсутствует правая круглая скобка".. Немного изменил то, что Вы предложили, но это тоже не работает :( Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.05.2011, 10:43 |
|
||
|
CR. Множественный LIKE
|
|||
|---|---|---|---|
|
#18+
whyt_Немного изменил то, что Вы предложили, но это тоже не работает :( Код: plaintext 1. 2. 3. 4. 1) после скобки while ... (...); 2) после result; Я думал это мелочи...:) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.05.2011, 10:54 |
|
||
|
CR. Множественный LIKE
|
|||
|---|---|---|---|
|
#18+
Хм, Вы знаете, самое удивительное в том, что я был уверен, что это проверил.. понедельник - таки дает о себе знать :) Еще раз спасибо за помощь! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.05.2011, 11:02 |
|
||
|
CR. Множественный LIKE
|
|||
|---|---|---|---|
|
#18+
Что-то рано я порадовался, не подскажите, почему мой вариант всё же не работает? Код: plaintext 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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.05.2011, 11:49 |
|
||
|
CR. Множественный LIKE
|
|||
|---|---|---|---|
|
#18+
whyt_, 1)Если последнее условие обрабатывает конец списка, то выкиньте последнюю инструкцию if и сделайте так: stringVar str_warehouse := {?warehouse_id} + ","; 2) str_temp у вас не в том месте обнуляется. Примерно так: Код: plaintext 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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.05.2011, 12:43 |
|
||
|
CR. Множественный LIKE
|
|||
|---|---|---|---|
|
#18+
whyt_, Ой, ошибся в коде: stringVar str_warehouse; if (len(str_warehouse) > 0) then str_warehouse := {?warehouse_id} + ","; Смысл такого приема в том, что не надо анализировать последнюю строку особым образом. Достаточно добавить в конец запятую к существующей строке и все. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.05.2011, 12:46 |
|
||
|
CR. Множественный LIKE
|
|||
|---|---|---|---|
|
#18+
Ну вот опять :( if ( length (str_warehouse) > 0) then str_warehouse := {?warehouse_id} + ","; Я надеюсь, разберетесь со всем этим. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.05.2011, 12:47 |
|
||
|
CR. Множественный LIKE
|
|||
|---|---|---|---|
|
#18+
str_temp у вас не в том месте обнуляется. Почему? Допустим, если warehouse_id = "%15%,%16%", то я должен посимвольно проанализировать и записать в str_temp. Т.е. сначала str_temp должна стать = "*15*" и быть использовано в условии like, после этого обнуляю str_temp и снова заполняю, чтобы получть str_temp = "*16*" и снова применить like.. Вроде так.. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.05.2011, 13:07 |
|
||
|
CR. Множественный LIKE
|
|||
|---|---|---|---|
|
#18+
whyt_str_temp у вас не в том месте обнуляется. Почему? Допустим, если warehouse_id = "%15%,%16%", то я должен посимвольно проанализировать и записать в str_temp. Т.е. сначала str_temp должна стать = "*15*" и быть использовано в условии like, после этого обнуляю str_temp и снова заполняю, чтобы получть str_temp = "*16*" и снова применить like.. Вроде так.. Логика верная, только реализация хромает. str_temp у вас обнуляется при выходе из цикла, а это роли не играет. А вот во время цикла при "встрече" с запятой, там, как раз где надо, не обнуляется. Вот я и поставил это: Код: plaintext 1. 2. 3. 4. 5. 6. 7. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.05.2011, 13:12 |
|
||
|
CR. Множественный LIKE
|
|||
|---|---|---|---|
|
#18+
Но ведь тогда она будет пустой уже для условия like? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.05.2011, 13:16 |
|
||
|
CR. Множественный LIKE
|
|||
|---|---|---|---|
|
#18+
>Но ведь тогда она будет пустой уже для условия like? Да, точно. Возможно правильно так: Код: plaintext 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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.05.2011, 13:43 |
|
||
|
CR. Множественный LIKE
|
|||
|---|---|---|---|
|
#18+
Хм, и снова ничего не выбирает.. :( Можно как - то проверить то конечное условие, которое использует Crystal Reports после всех манипуляций? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.05.2011, 14:46 |
|
||
|
CR. Множественный LIKE
|
|||
|---|---|---|---|
|
#18+
Понял, в чем ошибка.. поскольку в самом начале используется and, то происходит выбор записей типа "условия and field like XXX and field like YYY" - а это некорректно для одного и того же поля.. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.05.2011, 14:51 |
|
||
|
CR. Множественный LIKE
|
|||
|---|---|---|---|
|
#18+
whyt_Хм, и снова ничего не выбирает.. :( Можно как - то проверить то конечное условие, которое использует Crystal Reports после всех манипуляций? Вот код сравнения поправил: Код: plaintext 1. 2. 3. 4. 5. У меня теперь все работает. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.05.2011, 15:43 |
|
||
|
CR. Множественный LIKE
|
|||
|---|---|---|---|
|
#18+
whyt_Понял, в чем ошибка.. поскольку в самом начале используется and, то происходит выбор записей типа "условия and field like XXX and field like YYY" - а это некорректно для одного и того же поля.. Вообще очень странно так писать: and ( ..операторы, что-то делают.. ) Может вычислить result сначала а в конце написать?: if (.....) and result = true then true; else false; Так? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.05.2011, 15:53 |
|
||
|
CR. Множественный LIKE
|
|||
|---|---|---|---|
|
#18+
А как так сделать если неизвестно количество условий изначально? Ведь параметр может быть как %11%,%12%, так и %11%,%12%,%13%,%14%,... Вот в этом вся и загвоздка.. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.05.2011, 16:17 |
|
||
|
CR. Множественный LIKE
|
|||
|---|---|---|---|
|
#18+
whyt_А как так сделать если неизвестно количество условий изначально? Ведь параметр может быть как %11%,%12%, так и %11%,%12%,%13%,%14%,... Вот в этом вся и загвоздка.. Так у вас же цикл while идет. Я так понял, что вы его и сделали с той целью, чтобы обрабатывать любое количество условий like. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.05.2011, 16:44 |
|
||
|
CR. Множественный LIKE
|
|||
|---|---|---|---|
|
#18+
Извиняюсь..сам путаюсь и Вас запутал.. В общем, решил чуть по-другому. Создал формулу @Search Вот ее код Код: plaintext 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. А потом добавил в мастере разделов для секции Details такое условие для Supress: Код: plaintext 1. Таким образом получаю подавление всех строк с полем, неудовлетворяющим этому условию ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.05.2011, 16:57 |
|
||
|
|

start [/forum/topic.php?fid=31&msg=37274404&tid=1534923]: |
0ms |
get settings: |
12ms |
get forum list: |
12ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
61ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
65ms |
get tp. blocked users: |
2ms |
| others: | 13ms |
| total: | 188ms |

| 0 / 0 |

Извините, этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
... ля, ля, ля ...