Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2002.05.02;
Скачать: CL | DM;

Вниз

Быстрый подсчёт суммы чисел столбца. Есть 2 кода, медл. и быстрый   Найти похожие ветки 

 
Stif   (2002-04-11 10:44) [0]

Вот медленный
procedure TForm1.Button3Click(Sender: TObject);
const COL_WITH_SUMMA = 2;
var
i:integer;
TotalSum:Double;
begin
TotalSum:=0;
Edit1.Text:="";
for i:=0 to DBGrid1.DataSource.DataSet.RecordCount do
with DBGrid1.Datasource.DataSet do
begin
First;
TotalSum:=TotalSum + DBGrid1.Columns[COL_WITH_SUMMA].Field.AsFloat;
Next;
end;
Edit1.Text:=FloatToStr(TotalSum);
end;

Но считает это всё долго, 700 записей за 5 сек.


Если ремишь First и Next, то считает в миг, но правильно только в первый раз, второй раз, после добавления/удаления записи считает сумму уже не правильно. Как сделать быстро и правильно?


 
gek   (2002-04-11 10:48) [1]

А вот быстрый

Вот медленный
procedure TForm1.Button3Click(Sender: TObject);
const COL_WITH_SUMMA = 2;
var
i:integer;
TotalSum:Double;
begin
TotalSum:=0;
Edit1.Text:="";
table1.first;
table1.Disablecontrols;
while not table1.eof do
TotalSum:=TotalSum + tabl1.fieldbyname(".....").asfloat;
Edit1.Text:=FloatToStr(TotalSum);
table1.enablecontrols;
end;


 
alexandr   (2002-04-11 10:52) [2]

1) first убери, а то вообще левизна полная.
его поставить надо первой строкой в процедуре.
2) а разве внутри процедуры const возможет?
3) вначале процедуры поставь disableControls, в конце enableControls
4) Быстрее может быть с Query.



 
Johnmen   (2002-04-11 10:56) [3]

var
TotalSum : double;
mark : TBookmark;
...

with DataSet do begin;
mark:=GetBookmark;
DisableControls;
First;
TotalSum:=0.0;
while not EOF do begin;
TotalSum:=TotalSum+FieldByName(...).AsFloat;
Next;
end;
try GotoBookmark(mark);
finally FreeBookmark(mark);
end;
EnableControls;
end;

Это как вариант...


 
-=CrazyFish=-   (2002-04-11 11:58) [4]

см. дельфийский хелп по Local SQL на функцию SUM. Думаю, что считать будет побыстрее.



Страницы: 1 вся ветка

Текущий архив: 2002.05.02;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.01 c
6-2631
OGR
2002-02-13 12:32
2002.05.02
Как получить значения href=


1-2564
alm
2002-04-19 09:35
2002.05.02
Динамический массив исчезает...


3-2482
MCFire
2002-04-11 11:45
2002.05.02
Опять TreeView


14-2650
Arcan
2002-03-26 12:24
2002.05.02
Не в тему про модем...


1-2616
Gamar
2002-04-20 17:52
2002.05.02
Шрифт в диалогах