Форум: "Базы";
Текущий архив: 2005.01.30;
Скачать: [xml.tar.bz2];
ВнизДоброго времени суток, мастера! Тормоза при повторном выполнении Найти похожие ветки
← →
bers © (2004-12-21 07:27) [0]Надо выбрать записи основной таблицы, у которой в подчиненной есть определенные значения.
Делаю так: Листаю основную табл., вторым циклом просматриваю детальную и если искомые данные есть в основной в одном из полей ставлю признак, после цикла фильтр по этому признаку.
Проблема :
Первый проход нормально, а вот при повторном выполнении скорость очень сильно падает!!!
Вот код:var lg11,lg21 :integer;
В чем загвоздка, не пойму . Может надо как то очистить память после цикла?
begin
IF Button1.Caption="применить" Then
begin
TBL1.First;
Tbl2.First;
Tbl1.Filtered:=false;
Tbl1.Refresh;
For LG11:=0 to (Tbl1.RecordCount-1) do
Begin
Tbl1.Edit;
tbl1["SPV"]:="";{Обнуляю признак}
Tbl1.post;
If (Tbl2.RecordCount=0)or((Tbl2.RecordCount=1)and (tbl2["LG"]=null)) Then {Есть ли запись или не пустое ли поле если запись одна?}
Begin
Tbl1.Edit;
Tbl1["SPV"]:="1";
Tbl1.Post;
End;
For LG21:=0 to (Tbl2.RecordCount-1) do
Begin
If Tbl2["LG"]= "010{тут через "или" еще несколько значений}
Then
begin
Tbl1.Edit;
Tbl1["SPV"]:="1"{Нашлось- ставим признак в основную таблицу};
Tbl1.Post;
end;
Tbl2.Next;
End;
Tbl1.Next;
End;
Button1.Caption:=Показать все";
Tbl1.Filter:="[spv]<>1";
Tbl1.Filtered:=True;{фильтруем}
end
Else
begin
Tbl1.Filtered:=False;
Tbl1.Refresh;
Button1.Caption:="применить";
End;
end;
Заранее благодарен
← →
Виталий Панасенко (2004-12-21 08:42) [1]А через мастер-детальне пробовал ? Используется индекс(если он, конечно есть ! :-) )... Или для Tbl2 используй SetRange - тоже индекс используется.. думаю, будет быстрее(причем , на много), чем "лопатить" все подряд...
← →
Johnmen © (2004-12-21 09:10) [2]>Надо выбрать записи основной таблицы, у которой в подчиненной
>есть определенные значения.
Всё это делается одним несложным запросом.
(Предупреждаю, см.LocalSQL.hlp)
← →
SeZuka © (2004-12-21 09:12) [3]Сделай в самом начале
Tbl1.DisableControls;
Tbl2.DisableControls;
try
и в конце
finally
Tbl2.EnableControls;
Tbl1.EnableControls;
End;
должно помочь.
← →
bers © (2004-12-21 09:58) [4]Индексы использую конечно, DisableControls сейчас попробую,
но, главное в первой проходке- нормально,а повторное выполнение тормозит жутко.
>>Johnmen
Я бы с радостью.
Как выполнитьSQL на TTable? Есть разве такая возможность?
← →
Johnmen © (2004-12-21 10:06) [5]>bers © (21.12.04 09:58) [4]
>Как выполнитьSQL на TTable? Есть разве такая возможность?
Никак, ибо глупость...:)
Да и причём здесь TTable ???
← →
Vemer © (2004-12-21 10:36) [6]Просто как вариант (если парадукс такое поддерживает :)):
Select ID, Field1... From MainTable
Where Exists (Select Field 3 From DetailedTable
Where FK_KeyField = MainTable.ID)
← →
msguns © (2004-12-21 10:43) [7]Случай типичного злоупотребления TTable
У тебя есть условия:
- если (к-во подчиненных=0) или
(к-во подчиненных=1) и (LG=null) или
(среди подчиненных есть такие, у которых LG IN (список)])
то SPV мастера = "1"
иначе SPV мастера = ""
Причем отображается таблицы после коррекции.
Все это надо делать, конечно же запросами ! А после переоткрывать обе таблицы для просмотра.
Еще вопрос. Зачем тянуть всю таблу, а затем ее фильтровать, если можно обойтись запросом, в котором, собственно, и указать то же самое условие ?
← →
dolmat (2004-12-21 12:44) [8]Проблема в этом
Tbl1.Filtered:=false;
при первом проходе он скорее всего и так false;
при втором переход из true в false здесь и тормоз получается
← →
bers © (2004-12-21 16:16) [9]>>to dolmat
Спасибо, проверку поставил, малость полегчало(А может и еще от чего... Много всего пробовал). но небольшое снижение на втором проходе есть, в принципе на первое время вроде потянет.
Ставлю DisableControls- Быстро выполняет цикл, но искать нормально перестает. Странно ведь должно отключаться только визуальное отображение.
Или мне пора переустановить Delphi
← →
bers © (2004-12-21 16:58) [10]Да, при DisableControls у меня детальная не крутится.
← →
msguns © (2004-12-21 17:32) [11]>bers © (21.12.04 16:58) [10]
>Да, при DisableControls у меня детальная не крутится.
Эх, робяты !!! Сначала делаем, потом читаем, потом думаем, ага ?
← →
dolmat (2004-12-22 10:04) [12][DisableControls] надо на Gridе отключать. Так же тормоз из-за используемого грида может быть.
← →
bers © (2004-12-24 08:58) [13]
> [DisableControls] надо на Gridе отключать. Так же тормоз
> из-за используемого грида может быть.
dolmat, спасибо. Я отключал DBGrid, но особого эффекта не получил, пока не отключил еще и DBNavigator. После отключения и того и другого, стало очень хорошо. (К стати у DBGrid нет DisableControls)
А запросы- это просто замечательно, но не переписывать же всю базу. Ей жить осталось до нового года, потом конверт в другую.
Спасибо, всем кто откликнулся!
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2005.01.30;
Скачать: [xml.tar.bz2];
Память: 0.49 MB
Время: 0.04 c