Главная страница
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.47 MB
Время: 0.007 c
3-2451
koks
2002-04-10 11:15
2002.05.02
QReport без DataSet - а


14-2661
Brand
2002-03-26 23:24
2002.05.02
К вопросу о настройке сети.


3-2492
Dmitry V. Averuanov
2002-04-08 18:33
2002.05.02
Нужно


3-2448
Dimedrol
2002-04-09 12:22
2002.05.02
Помогите решить траблы с Query...


3-2470
Helen
2002-04-10 16:25
2002.05.02
Преобразование типа Byte к вещественному Double...