Форум: "Базы";
Текущий архив: 2002.08.08;
Скачать: [xml.tar.bz2];
ВнизКак оптимизировать вычисление одного столбца от друго(код внутри) Найти похожие ветки
← →
Борис (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;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.007 c