|
|
#1 |
|
Участник
|
Выборка не пустых строковых значений в AX 3.0
Вероятно баян, но в поиске не нашел.
Столкнулся со странным поведением, когда при выборке из таблицы по условию table.field (но не по условию table.field != "") не выбираются значения, начинающиеся со знака "минус" (-). Тут проще показать, чем рассказать )): X++: TestTable testTable;
RecordInsertList ril;
;
ttsbegin;
delete_from testTable;
ril = new RecordInsertList(tableNum(TestTable));
testTable.stringField = "1";
ril.add(testTable);
testTable.stringField = "-1";
ril.add(testTable);
testTable.stringField = "(3%*3%)";
ril.add(testTable);
testTable.stringField = "-(3%*3%)";
ril.add(testTable);
testTable.stringField = "bla-bla";
ril.add(testTable);
testTable.stringField = "-bla-bla";
ril.add(testTable);
ril.insertDatabase();
ttscommit;
setPrefix("Result");
while select testTable
where testTable.stringField
{
info("First\t" + testTable.stringField);
}
while select testTable
where testTable.stringField != ""
{
info("Second\t" + testTable.stringField);
}Код: Result
First
1
(3%*3%)
bla-bla
Second
1
-1
(3%*3%)
-(3%*3%)
bla-bla
-bla-blaВ AX2009 такое не повторяется. |
|
|
|
|
#2 |
|
Модератор
|
А QueryRun как себя ведет? Через него не пробовали?
А вообще, было что-то такое, но с RecId. Поэтому в ВР как раз и рекомендоалось ставить условие. Хотя странно, конечно. С Уважением, Георгий |
|
|
|
|
#3 |
|
Участник
|
Цитата:
X++: Query query = new Query(); QueryRun queryRun; QueryBuildDataSource qbds; TestTable testTable; ; qbds = query.addDataSource(tableNum(TestTable)); qbds.addRange(fieldNum(TestTable,StringField)).value(SysQuery::valueNotEmptyString()); queryRun = new QueryRun(query); while (queryRun.next()) { testTable = queryRun.get(tableNum(TestTable)); info(testTable.stringField); } |
|
|
|
|
#4 |
|
Участник
|
А с литералами как себя ведет ?
|
|
|
|
|
#5 |
|
Участник
|
Есть ощущение что там проблема со сравнением символов в БД.
Условие X++: where testTable.stringField != "" а условие X++: where testTable.stringFieldГде параметр - некая константа, которую аксапта подставит. Для Оракла это chr(2), для SQL не проверял. Есть ощущение что сравнение как-то влияет. |
|
|
|
| За это сообщение автора поблагодарили: lev (2). | |
|
|
#6 |
|
Участник
|
|
|
|
|
|
#7 |
|
Ищущий знания...
|
Logger правильно говорит про разницу формируемого запроса к базе.
создайте два запроса с литералами, с != и просто с полем. отловите эти запросы в Журнале трассировки операторов SQL, и посмотрите в каком виде они едут в базу. Думаю сравнив два запроса, вы поймете причину такого поведения системы.
__________________
"Страх перед возможностью ошибки не должен отвращать нас от поисков истины." (с) С Уважением, Елизаров Артем |
|
|
|
|
#8 |
|
Участник
|
Подозреваю, что, возможно, с какого-то KR этот баг исправлен - так что же, по другому запрос к базе данных отправляется?
|
|
|
|
|
#9 |
|
Ищущий знания...
|
попробовал у себя (Ах 3.0 SP3, Oracle)
X++ код: X++: select forceliterals ItemId from inventTable where inventTable.ItemId; Цитата:
SELECT A.ITEMID,A.RECID FROM INVENTTABLE A WHERE ((SUBSTR(NLS_LOWER(DATAAREAID),1,3)=NLS_LOWER('Х')) AND (SUBSTR(NLS_LOWER(ITEMID),1,20)>''))
X++: select forceliterals ItemId from inventTable where inventTable.ItemId != ""; Цитата:
SELECT A.ITEMID,A.RECID FROM INVENTTABLE A WHERE ((SUBSTR(NLS_LOWER(DATAAREAID),1,3)=NLS_LOWER('Х')) AND (SUBSTR(NLS_LOWER(ITEMID),1,20)<>''))
__________________
"Страх перед возможностью ошибки не должен отвращать нас от поисков истины." (с) С Уважением, Елизаров Артем Последний раз редактировалось lev; 25.08.2010 в 15:45. |
|
|
|
|
#10 |
|
Участник
|
|
|
|
| Теги |
| sql server, сортировка, сравнение |
|
|
|