Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2002.05.02;
Скачать: [xml.tar.bz2];

Вниз

Быстрый подсчёт суммы чисел столбца. Есть 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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.45 MB
Время: 0.004 c
14-2680
Cobalt
2002-03-26 16:10
2002.05.02
Безопасность в локальной сети


1-2626
Molotov
2002-04-20 20:14
2002.05.02
Корректная работа с файлами


1-2502
makruha
2002-04-18 12:06
2002.05.02
Компонета TGraph (из ActiveX)?


1-2563
Andrey007
2002-04-19 11:06
2002.05.02
Как получить доступ к свойствам ListBox a, который в TComboBox е?


7-2686
Andrey007
2002-02-05 10:56
2002.05.02
Можно ли программно изменить величину системного шрифта, и если да, то как?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский