Количество записей в логической таблице

Приемы и подходы, обмен опытом

Модераторы: Screw, larin

Ответить
Hershy
рег.отделение
Сообщения: 64
Зарегистрирован: Вт, 03/03/2009 07:53
Имя Фамилия: Николай Воронцов
Откуда: Галактика-Урал
Контактная информация:

Количество записей в логической таблице

Сообщение Hershy »

Добрый день!

Хотелось бы узнать есть ли возможность получить количество записей в таблице с условием наложения каких-либо ограничений в логической таблице

т.е. есть, например запрос

Код: Выделить всё

create view V1 as select * from ....., BASEDOC, ......... where ((.....  AND 101 == BASEDOC.VIDDOC AND .........));
можно ли, не используя вложенные запросы с count, получить количество выбранных записей в BASEDOC

Пробовал recordsintable:

Код: Выделить всё

Назначение
Функция возвращает количество записей в физической таблице.
Описание
function RecordsInTable (iTable : integer) : longInt;
Параметры
iTable - [b]номер узла логической таблицы[/b]. Константы с префиксом tn<имя таблицы>.
Возвращаемое значение
Количество записей в указанной физической таблице.
Возвращается количество записей в таблице BASEDOC без учета ограничений, хотя фраза "номер узла логической таблицы" вселяла надежду.

А без использования вложенных запросов потому, что во вложенном запросе необходимо написать все ограничения, которые выловить не представляется возможности

Такая вот проблема
cruger
топ-софт
Сообщения: 566
Зарегистрирован: Пт, 21/09/2007 15:19
Имя Фамилия: Фёдор Терсин
Откуда: Галактика Софт
Контактная информация:

Сообщение cruger »

Такого механизма нет
den
заказчик
Сообщения: 117
Зарегистрирован: Пт, 26/10/2007 14:16
Имя Фамилия: Денис Кучин
Откуда: Геомостпроект НПО

Сообщение den »

Так просто никак не узнать это число, мне кажется (rowcount видимо тока для модификаторов.... ). Если речь о докомпиляции интерф-са стандартного (ну или о своей разработке), то навреное просто посчитать можно в порядке

-pushpos
-v1._loop basedoc // при этом получаем кол-во записей на узле basedoc при текущих ограничениях
-poppos
Аватара пользователя
Evchic
партнер
Сообщения: 88
Зарегистрирован: Пн, 17/09/2007 07:57
Имя Фамилия: Евгений Ильин
Откуда: Галактика ЮГ г.Ростов-на-Дону
Контактная информация:

Сообщение Evchic »

Как вариант но может не получится
Использование агрегатных функций

Для автоматизации агрегирования данных можно использовать функции:

grSum( <вычисляемое выражение> ) - вычисляет сумму указанного параметра;

grAvg( <вычисляемое выражение> ) - вычисляет среднее значение указанного параметра;

grMax( <вычисляемое выражение> ) - вычисляет максимальное значение указанного параметра;

grMin( <вычисляемое выражение> ) - вычисляет минимальное значение указанного параметра;

grCount() - вычисляет количество итераций;

grFirst( <вычисляемое выражение> ) - возвращает первое значение указанного параметра;

grLast( <вычисляемое выражение> ) - возвращает последнее значение указанного параметра.

Использование агрегатных функций имеет смысл в контексте определенной группы. Посему, для явного обращения нужно использовать идентификатор группы в качестве префикса к имени функции. По умолчанию подставляется последняя закрытая группа. В качестве параметра можно использовать произвольное вычисляемое выражение. Тип результирующего выражения всегда приводится к максимальному, с сохранением сущности. Например, byte, word, integer, longInt всегда приводятся к comp, а single - к double.

Пример

_loop aTable
{
...
groupBy g1 : aTable.f1
{
// g2.grSum( f3 ); тут сумма не доступна
groupBy g2 : aTable.f2
{
// здесь по умолчанию ничего не работает
g2.grSum( f3 ); // так получим сумму с нарастающим итогом
}
sum( f3 ); // так мы обращаемся к сумме группы g2
g2.grSum( f3 ); // или так мы обращаемся к сумме группы g2
}
g1.grSum( f3 ); // а можно и так, но в данном случае g1 было писать не обязательно
...
}
Hershy
рег.отделение
Сообщения: 64
Зарегистрирован: Вт, 03/03/2009 07:53
Имя Фамилия: Николай Воронцов
Откуда: Галактика-Урал
Контактная информация:

Сообщение Hershy »

Спасибо большое!

Меня интересовали какие-нибудь системные функции.

Придется, как и предполагалось, через _loop делать :-(
Ответить