29.03.2004, 13:22 | #1 |
Участник
|
Фильтр по enum-полю в select
Вопрос в следующем,
Чтобы отобрать все строковые поля в select я пишу ...="*", а есть что-то аналогичное для Enum-полей, чтобы можно было отбирать все Enum-поля? |
|
29.03.2004, 13:33 | #2 |
1C
|
Re: Фильтр по enum-полю в select
Цитата:
Изначально опубликовано ArturK
Чтобы отобрать все строковые поля в select я пишу ...="*", |
|
29.03.2004, 13:46 | #3 |
Участник
|
Ok, поподробнее напишу.
Для строкового поля я пишу так: PHP код:
PHP код:
|
|
29.03.2004, 14:21 | #4 |
Участник
|
Привет!
Так? PHP код:
__________________
С уважением, Андрей Беседин |
|
29.03.2004, 14:45 | #5 |
Участник
|
Цитата:
Изначально опубликовано ArturK
Для строкового поля я пишу так: PHP код:
1. Не стоит. Поскольку придется учитывать разные языки. Причем учитывать хитро, поскольку клиент и сервер приложений могут быть запущены с разными языками. 2. Не стоит. Поскольку Аксапта позволяет изменять текстовые метки пользователям. И ваше условие может не сработать, если пользователь поменяет какой-либо текст 3. Не стоит. Поскольку вы закладываете какой-то смысл в текст метки, вместо того, чтобы пользоваться нормальными реляционными средствами. Если некоторые перечисления у вас имеют специальный смысл, то сделайте таблицу, в которую занесите эти перечисления. Не закладывайте в код программы "магические" константы. |
|
29.03.2004, 17:51 | #6 |
Участник
|
Если нужны не текст перечисляемого типа, а именно значение, то почему не написать условие "больше или равно нулю" ("0..") или от 0 до 255 (других значений ведь быть не может)
|
|
30.03.2004, 10:10 | #7 |
Участник
|
Редкостный изврат.
Енум - это ПО ОПРЕДЕЛЕНИЮ - ПЕРЕЧИСЛЕНИЕ !
Какой диапазон может быть в перечислении? Цитата:
Цитата из ArturK
PHP код:
PHP код:
|
|
30.03.2004, 10:10 | #8 |
Участник
|
Цитата:
Изначально опубликовано Владимир Максимов
Если нужны не текст перечисляемого типа, а именно значение, то почему не написать условие "больше или равно нулю" ("0..") или от 0 до 255 (других значений ведь быть не может) У меня может быть два условия, первое, когда берутся все значения и второе, когда только одно значение. Хочется реализовать это в одном select`e, а не писать PHP код:
|
|
30.03.2004, 10:19 | #9 |
Участник
|
Цитата:
Изначально опубликовано ArturK
PHP код:
PHP код:
|
|
30.03.2004, 10:38 | #10 |
Участник
|
PHP код:
А если нужно отобрать все, то Мин.значение = 0 Макс.значение = 255 Enum не могут принимать значения больше 255. Это системное ограничение. |
|
30.03.2004, 10:44 | #11 |
Участник
|
Цитата:
Изначально опубликовано ta_and
PHP код:
PHP код:
|
|
30.03.2004, 11:13 | #12 |
Участник
|
Re: Редкостный изврат!
Цитата:
Изначально опубликовано ta_and
Редкостный изврат! Енум - это ПО ОПРЕДЕЛЕНИЮ - ПЕРЕЧИСЛЕНИЕ ! Какой диапазон может быть в перечислении? А между тем в исходных кодах аксапты за милую душу встречаются запросы по перечислимому полю с выборкой типа Value >= X или X1 <= Value <= X2. В логику некоторых "родных" перечислимых типов заложено смысловое значение диапазонов. Простейший пример - перечислимый тип прав доступа Так что зря вы так на перечислимые типы-то...
__________________
Улыбаемся и машем, парни! Улыбаемся и машем... |
|
30.03.2004, 11:16 | #13 |
Участник
|
:) Прошу прощения. поторопился...
Видел же, что-то тут не так... но не стал проверять...
Конечно правильно так: Цитата:
Изначально опубликовано Джон
PHP код:
|
|
30.03.2004, 11:19 | #14 |
Участник
|
Цитата:
Изначально опубликовано Anais
В логику некоторых "родных" перечислимых типов заложено смысловое значение диапазонов. :Р Все равно редкостный изврат. От таких программерских решений просто тошнит. Посмотрите на енум LedgerTransTxt. Вам хорошо? |
|
30.03.2004, 11:29 | #15 |
Участник
|
ArturK
Кстати, если все-таки будешь делать такое универсальное условие проверь 2 предложенных варианта с точки зрения быстродействия. Исходя из логики работы MS SQL лично мне кажется, что BETWEEN должен работать быстрее чем ИЛИ. Но это надо бы проверить. В смысле быстродействия с Axapta ничего заранее не ясно. |
|
30.03.2004, 11:34 | #16 |
Участник
|
Цитата:
Изначально опубликовано ArturK
Хочется реализовать это в одном select`e, а не писать PHP код:
Для сложных случаев используйте Query. Тогда вы сможете указать Range(...).value(значение) или оставить Range(...).value(SysQuery::valueEmptyString()) Кроме того, query можно создать в AOT, а в коде писать одну строчку q = new Query(querystr(myQuery)). Так вам меньше придется программировать. постарайтесь не использовать select |
|
30.03.2004, 12:26 | #17 |
Участник
|
Цитата:
Изначально опубликовано Владимир Максимов
В смысле быстродействия с Axapta ничего заранее не ясно. И, если ( ! если нужно одно значение) = true, то отбросит эту часть в where вообще, как константную. А если ( ! если нужно одно значение) = false, то на сервер пойдет условие where enum_fild == EnumName::Element1;
__________________
Улыбаемся и машем, парни! Улыбаемся и машем... |
|
30.03.2004, 12:38 | #18 |
Участник
|
Цитата:
Axapta ... отбросит часть
В лучшем случае, это сделает оптимизатор sql |
|
30.03.2004, 13:37 | #19 |
Участник
|
Цитата:
Изначально опубликовано mazzy
А вот на это рассчитывать не стоит, по-моему Цитата:
Изначально опубликовано mazzy
В лучшем случае, это сделает оптимизатор sql
__________________
Улыбаемся и машем, парни! Улыбаемся и машем... |
|
|
Опции темы | Поиск в этой теме |
Опции просмотра | |
|