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

Вниз

Как оптимизировать вычисление одного столбца от друго(код внутри)   Найти похожие ветки 

 
Борис ©   (2002-07-17 09:58) [0]

Вот собственно код. Как его птимизировать, чтобы выполнялся как можно быстрее во времени.

Отказыаться от FieldByName нельзя.


// Вычисляем сколько надо выдать на указанное количество комплектов
form1.tsklad.First;
while not form1.tsklad.eof do
begin
form1.tsklad.edit;
//Listbox1.Items.add(floattostr(norm));
if combobox1.ItemIndex <> 5 then
begin
form1.tsklad.FieldByName("Pole2").asfloat:=form1.tsklad.FieldByName(norm).asfloat*strtoint(edit1.text);
form1.tsklad.FieldByName("Pole3").asfloat:=form1.tsklad.FieldByName(norm).asfloat*10;
end
else
begin
form1.tsklad.FieldByName("Pole2").asfloat:=0;
form1.tsklad.FieldByName("Pole3").asfloat:=0;
end;
form1.tsklad.next;
end;


 
sniknik ©   (2002-07-17 10:37) [1]

Борис ©-> Отказыаться от FieldByName нельзя.
это еще почему?

я так делаю, до цикла
MasT1[0]:= TDest.FieldByName("FIRM_NAME").Index;
MasT2[0]:= TSour.FieldByName("NAME").Index;
MasT1[1]:= TDest.FieldByName("ARTIKL").Index;
MasT2[1]:= TSour.FieldByName("ARTICUL").Index;

в цикле обращения
TDest.Fields[MasT1[0]].AsString:= TSour.Fields[MasT2[0]].AsString;
TDest.Fields[MasT1[1]].AsString:= TSour.Fields[MasT2[1]].AsString;

ускоряет заметно.


 
Johnmen ©   (2002-07-17 10:49) [2]

>sniknik © (17.07.02 10:37)

А в чем отличия по существу ?


 
sniknik ©   (2002-07-17 10:58) [3]

не нужно разбирать заголовок (иногда большой) и выделять индекс поля по имени.
посмотри в исходниках (если есть от Halcyon например, хорошо видно) функция FieldByName состоит в основном из разбора заголовка таблици и в конце вызов по индексу.

Не надо заставлять программу делать одно и тоже в цикле. (мое личное мнение)


 
sniknik ©   (2002-07-17 11:00) [4]

P.S. на оптимизатор надейся а сам не плошай. :-)


 
Johnmen ©   (2002-07-17 11:06) [5]

>sniknik © : Принимается ! :)))


 
Desdechado ©   (2002-07-17 11:45) [6]

я бы еще сделал
with( form1.tsklad )
и
strtoint(edit1.text) не делал бы в цикле, а вне его 1 раз.

это мелочь, но тоже влияет на скорость


 
kaif ©   (2002-07-17 12:09) [7]

А нельзя, к примеру, парочку TQuery поставить и в них что-нибудь вписать типа
update tsklad
set Pole2 = norm * :param,
set Pole3 = norm * 10

update tsklad
set Pole2 = 0, Pole3 = 0
А потом вызывать ExecSQL первого или второго, в зависимости от ситуации.
Так разве не быстрее будет, чем руками по таблице ходить?


 
MsGuns ©   (2002-07-17 12:14) [8]

Kaif прав ! Я бы именно так и делал (предварительно, правда, проверив, не занята ли табла другим юзером)



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

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

Наверх




Память: 0.48 MB
Время: 0.015 c
1-24085
orlov
2002-07-26 13:46
2002.08.08
как сохранять выбранные кнопки в Check:istBox


1-24064
aev
2002-07-26 09:49
2002.08.08
Типы


7-24243
yozhik
2002-05-22 11:11
2002.08.08
как зашить rar.exe в мою прогу


1-24071
lpp
2002-07-26 12:25
2002.08.08
InstallShield Express for Delphi 5


14-24199
irmantukas
2002-07-13 23:36
2002.08.08
Помогите ! Где можно найти какой нибудь декомпилятор