|
|
#2 |
|
Administrator
|
Проблема в том, что SysQuery::countTotal правильно работает только в случае, если в Query один DataSource.
Более правильный метод подсчета записей, возвращаемых Query см. в методе webTableLookup.run() Там есть вложенный метод computeRecordCount, который все и делает. Вкратце, суть метода такова. Сначала создается копия исходного Query. Для всех DataSource в Query отменяется динамическое создание списка выбираемых полей и добавляется только поле TableId (чтобы хоть что-то выбиралось). Далее, в самый главный DataSource добавляется Selection Field RecId с функцией агрегации COUNT (если по простому, делается SELECT COUNT(RecId)). Созданный Query запускается и получает результат. В большинстве случаев, результат верный. Однако, если в исходном используется GroupBy, функция вернет количество записей только в первой группе. Для исправления ситуации нужен небольшой bug fix. Во-первых, добавьте в функцию локальную переменную ret типа int. Во-вторых, вместо Code: return record.(recId); Code: ret = record.(RecId);
while (queryRun.next()) {
record = queryRun.getNo(1);
ret += record.(RecId);
}
return ret;
__________________
Not registered yet? Register here! Have comments, questions, suggestions or anything else regarding our web site? Don't hesitate, send them to me |
|
|