![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Нужно просуммировать [D7, Paradox]
sloug © (2004-08-02 18:52:00)Добрый вечер уважаемые знатоки! Вопрос в следующем. Есть таблица Table1,в ней есть столбец Cost, мне нужно просуммировать значения всех записей в этом столбце. Как это сделать?
Johnmen (2004-08-03 23:29:00) [1]>DSKalugin © (03.08.04 20:10) [21]
Вот-вот. И под фильтром ещё...:)
Так что запоминание позиции и возврат в нее делается не RecNo'мером, а с помощью закладок...
DSKalugin (2004-08-03 20:10:00) [2]ЧТОБЫ НЕ ВИСЛО надо добавить Next и обрамить тело цикла в Begin end. Пардон за ошибку
var s:Double;
c: LongInt;
begin
s:=0;
c:=Table1.RecNo; //запомним текущую позицию
Table1.DisableControls; //отключим пробег в DBGrid
Table1.First; // В начало таблицы
while not Table1.eof do begin
s:=s+Table1.FieldByName('Cost').asFloat;
Table1.Next;
end;
Table1.RecNo:=c; // возврат курсора на туже строку
Table1.EnableControls; //включаем курсор
label1.caption:=FloatToStr(s); //выводим результат
end;
С запросом на Query могут быть расхождения, если таблица окажется под фильтром. Тогда надо динамически формировать хвост WHERE
Так что при учете фильтрации это не проще будет.
Anatoly Podgoretsky (2004-08-03 19:50:00) [3]sloug © (03.08.04 19:13) [19]
Теперь тоже самое сделай с 'select sum(cost) from Table1' и сравни время, думаю будет значительно быстрее. А данные получить еще проще Query.Fields[0].AsFloat
DSKalugin совместно с CAD пробовал :-)
sloug (2004-08-03 19:13:00) [4]Я сделал следующим образом:
Var Summ: real;
Begin
Summ:=0;
With Form2.Table1 Do
Begin
While not eof do
begin
Summ:=Summ+FieldByName('Summ').AsFloat;
next;
end;
end;
end;
Все нормально считает.
Johnmen (2004-08-03 18:20:00) [5]>sloug ©
Тяга к знаниям похвальна.
Но не надо забывать, что здесь не курсы повышения квалификации и не курсы "Дельфи за 21 минуту".
Здесь ОТВЕЧАЮТ на КОНКРЕТНЫЕ вопросы !
sloug (2004-08-03 18:16:00) [6]Спаисбо за то, что откликнулись на мою просьбу. Я только начинающий и поэтому не знаю как SQL запрос вывести в TEdit или TDBEdit.
Очень понравилось предложение сергей1. Когда пишу так как предложил DSKalugin ©, программа почему-то виснет.
У меня еще вопрос, могу ли я в локальной базе данных использовать TClientDataSet, потом создать агрегатное поле, значение которого привсоить TDBEdit. Так же вроде можно.И что такое DBGRIDEH.
Надеюсь на ответы, и если можно подробнее.
Rule (2004-08-03 14:27:00) [7]Rule © (03.08.04 14:25) [15]
Ну если кто-то чего то понял то хорошо, а то я такого накрутил, аж самому старшно стало, сори за сложность высказываний, просто голова уже кипит, баги вылавливаю вот и тяжко мне :)
Rule (2004-08-03 14:25:00) [8]Johnmen © (03.08.04 13:17) [14]
"без подключения к БД" это типа без обращения к СУБД, а именно с теми данными которые были получены, кстати один из минусов, если не были получены все данные (fetch all) то показывает не правильную сумму, а в последней версии кстати вроде исправлено, получается что тогда помимо открытия происходит "выгребание всех данны", но это относится к Клиент-Серверным СУБД, а в данной ветке вроде обсуждается Парадокс, которая оной не является, так что для автора по моему будет проще использовать грид, так как BDE который будет обрабатывать запрос на сумму все равно будет перебирать все записи а так как серверной части нет то это будет происходить в самом приложении, таким образом все способы сводятся к одному и томуже, просто это одно и тоже делают разные модули (части) (если перечислять то переборы делают BDE, DBGRIDEH или руками, вот автору и предстоит выбрать более удобный метод, так как по своей функциональности они очень похожи)
Johnmen (2004-08-03 13:17:00) [9]>Rule © (03.08.04 13:06) [13]
>Да , но делают они это локально, без подключения к БД
"локально" - полный проход, и, значит, получение клиентом ВСЕХ записей. Что полность эквивалентно while not Eof do begin; ... Next; end;
Выполнить просто запрос типа [2]/[5] менее накладно по ресурсам и часто быстрее...
Про подключение к БД не понял, но догадываюсь...:)
Rule (2004-08-03 13:06:00) [10]Johnmen © (03.08.04 12:59) [12]
Да , но делают они это локально, без подключения к БД
Johnmen (2004-08-03 12:59:00) [11]>Rule © (03.08.04 12:57) [11]
>... легко средствами самого грида (я про DBGridEh)
Надеюсь понятно, что эти "средства" делают полный проход набора данных ? (типа [1])
:)
Rule (2004-08-03 12:57:00) [12]согласен с суммами, но вот есть альтернативный вариант, я его использую чаще, это отображение суммы прям в гриде, это делается легко средствами самого грида (я про DBGridEh)
Johnmen (2004-08-03 12:49:00) [13]>:-))))))))) Next забыл
И не только его...:)
DSKalugin (2004-08-03 12:44:00) [14]:-))))))))) Next забыл
Johnmen (2004-08-03 09:14:00) [15]>Anatoly Podgoretsky © (03.08.04 09:12) [7]
Точно!
Anatoly Podgoretsky (2004-08-03 09:12:00) [16]Обучает использованию Ctrl+Alt+Del
Johnmen (2004-08-03 09:06:00) [17]>SKalugin © (02.08.04 19:15) [1]
Чё-то ты накосячил и даже не извинился...:)))
vakir77 (2004-08-02 22:50:00) [18]Query1.Close;
Query1.SQL.Clear;
Query1.SQL.Add('select sum(cost) from Table1');
Query1.Open;
GanibalLector (2004-08-02 22:35:00) [19]2 сергей1 and AlexG
А ADO тут причем???Обычным Query можно обойтись
AlexG (2004-08-02 21:25:00) [20]сергей1 верно говорит