|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
Суммирование поля в ClientDataSet
Подскажите пожалуйста, как проссумировать колонку в ClientDataSet? тип данных - float.
В принципе, вот такой цикл работает: Код:
While i<>''; Begin i:=i+ClientDataSet1.FieldValues['Field1']; ClientDataSet1.Next; end; Admin: Пользуемся тегами! Но может существует более удобный и быстрый способ? Слышал про вычисляемые поля, но совершенно не понимаю что это такое и с чем его едят. Подскажите пожалуйста, желательно с примером на этом компоненте Заранее спасибо за внимание! |
#2
|
|||
|
|||
Вычисляемое поле не подойдёт, т.к. берутся данные из текущей записи (т.е. из строки, а не из столбца). Я обычно использую запросы (TQuery). Так, вывести значения можно:
Код:
select * from Table1 order by Field1 Код:
select SUM(Field1) from Table1 |
#3
|
|||
|
|||
Собственно, вариантов решения 2.
1. искать компонент, который это уже умеет делать (напимер, DevExpress'овский грид дает такую возможность). 2. Фактически делать так, как приведено в вопросе, но с некоторыми исправлениями. Код:
function TQuickViewForm.GetSum(AFieldIdx: Integer): Double; var BM : Pointer; begin Result := 0; // сохраняем текущую позицию курсора BM := cdsData.GetBookmark; // Блокируем отрисовку визуальных компонентов cdsData.DisableControls; // Считаем cdsData.First; Try While Not cdsData.Eof Do Begin Result := Result + cdsData.Fields[AFieldIdx].AsFloat; cdsData.Next; End; Finally // Восстанавливаем текущую позицию курсора cdsData.GotoBookmark(BM); cdsData.FreeBookmark(BM); // Разрешаем отрисовку cdsData.EnableControls; End; end; В принципе, еще можно добавить проверку значения поля на null и прочую ерунду (например, если потом надо считать среднее значение, то заодно можно посчитать кол-во записей реально участвоваших в суммировании). |