|  25.08.2010, 14:26 | #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 такое не повторяется. | 
|  | 
|  25.08.2010, 14:33 | #2 | 
| Модератор | 
			
			А QueryRun как себя ведет? Через него не пробовали? А вообще, было что-то такое, но с RecId. Поэтому в ВР как раз и рекомендоалось ставить условие. Хотя странно, конечно. С Уважением, Георгий | 
|  | 
|  25.08.2010, 14:48 | #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); } | 
|  | 
|  25.08.2010, 14:50 | #4 | 
| Участник | 
			
			А с литералами как себя ведет ?
		 | 
|  | 
|  25.08.2010, 14:53 | #5 | 
| Участник | 
			
			Есть ощущение что там проблема со сравнением символов в БД. Условие X++: where testTable.stringField != "" а условие X++: where testTable.stringFieldГде параметр - некая константа, которую аксапта подставит. Для Оракла это chr(2), для SQL не проверял. Есть ощущение что сравнение как-то влияет. | 
|  | |
| За это сообщение автора поблагодарили: lev (2). | |
|  25.08.2010, 15:03 | #6 | 
| Участник | |
|  | 
|  25.08.2010, 15:15 | #7 | 
| Ищущий знания... | 
			
			Logger правильно говорит про разницу формируемого запроса к базе. создайте два запроса с литералами, с != и просто с полем. отловите эти запросы в Журнале трассировки операторов SQL, и посмотрите в каком виде они едут в базу. Думаю сравнив два запроса, вы поймете причину такого поведения системы. 
				__________________ "Страх перед возможностью ошибки не должен отвращать нас от поисков истины." (с) С Уважением, Елизаров Артем | 
|  | 
|  25.08.2010, 15:22 | #8 | 
| Участник | 
			
			Подозреваю, что, возможно, с какого-то KR этот баг исправлен - так что же, по другому запрос к базе данных отправляется?
		 | 
|  | 
|  25.08.2010, 15:42 | #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. | 
|  | 
|  25.08.2010, 18:15 | #10 | 
| Участник | |
|  | 
| Теги | 
| sql server, сортировка, сравнение | 
|  | 
| 
 |