Вниз
Скачать: 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 вся ветка

Скачать: CL | DM;



Память: 0.46 MB
Время: 0.009 c
1-2542
roman001
2002-04-18 18:32
2002.05.02
TStringGrid.Objects


1-2552
VictorS
2002-04-19 02:12
2002.05.02
существование экземпляра класса


3-2500
Zak
2002-04-08 09:56
2002.05.02
Мастер-детаиЛ чтоб её!


14-2666
KaPaT
2002-03-26 21:56
2002.05.02
После переустановки Win98 пропала сеть! Что делать?


1-2583
som
2002-04-19 16:56
2002.05.02
Edit




   Наверх