![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
ADOQuery.SQL.Add [D5, MSSQL]
MakNik © (2004-03-11 14:48:00)Может кто знает в чем причина медленной работы
ADOQuery.SQL.Add('...')? Проблема в том, что на некоторых компах эта операция очень тормозит. Как можно обойти этот глюк?
sniknik (2004-03-11 17:19:00) [1]есть такая полезная галочка в опциях проекта USE Debug DCUs, поставь ее, и поставь брейпоинт на ADOQuery.SQL.Add(' Update ...'); дальше дело техники по остановке нажимаем F7 и попадаем в..., нет не в метод добавления строки, а в метод GetSQL, потому как SQL property типа TStrings, так все и происходит сначало получение списка после добавили строку, следующее - получение списка (увеличивщегося) добавление строки ....
но переделывать компонент не нужно нужно сменить логику, чтобы не закачивать туда по n-строк (нет n мало, m-строк :), а пользоваться параметрами к примеру и одноразово внесенными запросами. (и не ADOQuery а ADODataSet/ADOCommand)
MakNik (2004-03-11 16:53:00) [2]... да нет, дело какраз в ADOQuery!!! точнее в ADOQuery.SQL (типа TStrings)... если накапливать текст скрипта в отдельной переменной типа TStrings, то все работает быстро, а вот если работать непосредственно с ADOQuery.SQL... , то - тормоз...
(... а "точки" и скрипт я привел как пример того, где тормозит, а не как пример алгоритмизации... )
V-A-V (2004-03-11 16:05:00) [3]Похоже MakNik никогда не выкидывает мусор из "корзины", но онаже не бездонная....
VAleksey (2004-03-11 16:01:00) [4]
> sniknik © (11.03.04 15:55) [8]
5 баллов.
Что сказать - мастер. Очень похоже...
V-A-V (2004-03-11 15:58:00) [5]sniknik ©
браво...
sniknik (2004-03-11 15:55:00) [6]глюк в точках, на точках всегда тормозит (время уходит в точку), чем их больше тем больше времени уходит, избавься от них.
это даже не бред.
бред вот это, добавлять в цикле новые значения к списку и удивляться почему на пустом списке операция выполняется быстрее чем на переполненном. после искать (успешно) крайнего, это у нас компонент ADOQuery почемуто, а не сам любимый который логику извращенную имеет (а та в ответ ...:).
MakNik (2004-03-11 15:53:00) [7]
> V-A-V ©
... меня больше интересует почему Add медленно работает...
V-A-V (2004-03-11 15:47:00) [8]А ADO это что какая-то таблица?
Eсли это так то это изврат, бегать по таблице и составлять неведая откуда текст запроса для ADOQuery.
MakNik (2004-03-11 15:39:00) [9]Отрывок кода:
...
While Not ADO.Eof do
begin
ADOQuery.SQL.Add(' Update ...');
ADOQuery.SQL.Add('...');
...
ADO.Next;
end;
ADOQuery.ExecSQL;
То, что тормозит на Add, это проверено (вставлял логирование)... Интересно, что время выполнения этой операции возрастает от сотых секунда в начале цикла, до 4 секунд после выполнения последней итерации...
V-A-V (2004-03-11 15:33:00) [10]Да я знаю, что не эта...
VAleksey (2004-03-11 15:28:00) [11]Тормозит не эта операция.
V-A-V (2004-03-11 15:23:00) [12]
...
ADOQuery.Close;
ADOQuery.SQL.Text:= 'Select Field1, Field2 From MyTable Where ...';
ADOQuery.Open;
...
попробу так.
Vlad (2004-03-11 14:53:00) [13]
> MakNik © (11.03.04 14:48)
Уверен что именно эта строчка - причина торможения, а не Open какой нибудь или ExecSQL ?