|
02.11.2007, 17:57 | #1 |
Участник
|
пустой query или нет?
Как можно понять пустые все условия в query или нет без перебора range и не основываясь на SysQuery::countTotal, тк для пустого запроса он возвращает все записи => кол-во ненулевое записей и => сравнивать просто с общим кол-вом записей в таблице некорректно.
Никак? |
|
02.11.2007, 18:07 | #2 |
Участник
|
А в чем проблема перебора всех range запроса?? это во всяком случае много быстрее, чем запрос выполнять к БД
|
|
03.11.2007, 02:33 | #3 |
Участник
|
|
|
02.11.2007, 19:38 | #4 |
Участник
|
Извратится-то можно, только по сравнению с прямым перебром Range любые способы не дают 100% гарантии верного ответа.
Ну, например, можно прочитать строку сформированного запроса и подсчитать количество неких последовательностей символов, которые будут соответствовать пустым условиям. X++: static void Job_QueryRangeEmpty(Args _args) { Query query; QueryBuildDataSource qbds; QueryBuildRange qbr; int nextI, qtyEmpty; str strQuery, strQueryExtract; ; #localmacro.emptyValue1 "= )" #endmacro #localmacro.emptyValue2 "=)" #endmacro // Тестовый Query для проверки query = new Query(); qbds = query.addDataSource(tablenum(InventTable)); // Одиночные условия for (nextI = 1; nextI <= 1 ; nextI++) { qbr = qbds.addRange(fieldNum(InventTable, ItemId)); qbr.value(queryValue('')); } // Диапазон значений qbr.value(queryRange('','')); // Подсчет количества пустых условий strQuery = query.dataSourceNo(1).tostring(); info(strQuery); strQueryExtract = global::strReplace(strQuery,#emptyValue1,""); qtyEmpty = (strLen(strQuery)-strLen(strQueryExtract)) / strLen(#emptyValue1); strQueryExtract = global::strReplace(strQuery,#emptyValue2,""); qtyEmpty += (strLen(strQuery)-strLen(strQueryExtract)) / strLen(#emptyValue2); info(strFmt("пустых условий %1", qtyEmpty)); } По моему, проще написать универсальный код перебора всех Range во всех DataSource. |
|