Главная страница
    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
1-2503
zlo
2002-04-18 17:24
2002.05.02
ПОЛУЧЕНИЕ РАЗМЕРА ПАПКИ


7-2705
Макс
2002-02-05 17:48
2002.05.02
Получение изображений со сканера


7-2698
yuger
2002-02-05 09:35
2002.05.02
Програмный интерфейс к IExplorer


1-2538
LazorenkoX
2002-04-18 10:21
2002.05.02
Рисование в консоли


1-2592
большой НовиЧОК
2002-04-19 19:10
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
Английский Французский Немецкий Итальянский Португальский Русский Испанский