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

Вниз

быстро пробежать по записям   Найти похожие ветки 

 
321   (2009-02-20 12:26) [0]

Есть ли способ быстро пробежать по записям в таблице:
В таблице 50 000 записей.
делаю так, но на все затрачивается около минуты:


FieldID := Query.FieldByName("ID");
while not Query.Eof do
begin
  Items.add(FieldID.AsString);
  cmp_QueryByField_.Next;
end;


 
Dennis I. Komarov ©   (2009-02-20 12:53) [1]

А зачем добавлять куда-то все 50000 записей? Пользователю оно надо? ИМХО надо подумать над логикой...


 
Ega23 ©   (2009-02-20 13:00) [2]

var
 lst : TStringList;
begin
 lst := TStringList.Create;
 try
   Query.DisableControls;
   try
     Query.First;
     while not  Query.Eof do
     begin
        lst.Add(Query.FieldByName(...).AsString);
        Query.Next;
     end;
   finally
     Query.EnableControls;
   end;

   Memo1.Lines.Assign(lst);
 finally
   lst.free;
 end;  


 
Dennis I. Komarov ©   (2009-02-20 13:19) [3]


> var
>  lst : TStringList;

А это откуда взял?


 
Ega23 ©   (2009-02-20 13:22) [4]


> А это откуда взял?


Написал. Пальцами.


 
Dennis I. Komarov ©   (2009-02-20 13:27) [5]

Я всмысле, мало ли чего там за Items...


 
Ega23 ©   (2009-02-20 13:29) [6]


> Я всмысле, мало ли чего там за Items...
>


99% что TStrings


 
Dennis I. Komarov ©   (2009-02-20 13:44) [7]

Ах, забыл - телепатор :)


 
Sergey13 ©   (2009-02-20 14:03) [8]

> [0] 321   (20.02.09 12:26)

> на все затрачивается около минуты

> while not Query.Eof do
> begin
>  Items.add(FieldID.AsString);
>  cmp_QueryByField_.Next;
> end;

ИМХО странно что вообще заканчивается.


 
Anatoly Podgoretsky ©   (2009-02-20 14:54) [9]

> Ega23  (20.02.2009 13:00:02)  [2]

DisableControls и EnableControls должны быть в одном блоке try


 
Anatoly Podgoretsky ©   (2009-02-20 14:54) [10]

> Ega23  (20.02.2009 13:00:02)  [2]

DisableControls и EnableControls должны быть в одном блоке try


 
Ega23 ©   (2009-02-20 15:34) [11]


> DisableControls и EnableControls должны быть в одном блоке  try


С какого перепугу?


 
sniknik ©   (2009-02-20 15:39) [12]

Ega23 ©   (20.02.09 13:00) [2]
+
lst.BeginUpdate;
lst.EndUpdate;


 
KSergey ©   (2009-02-20 15:40) [13]

> Ega23 ©   (20.02.09 13:00) [2]
>    Query.DisableControls;

>      Query.EnableControls;

Вероятнее всего это есть смысл сделать у контрола, в котром набиваются Items. Хотя если к Query что-то привязано - то и там не плохо, конечно.


 
KSergey ©   (2009-02-20 15:41) [14]

ну вот, sniknik ©   (20.02.09 15:39) [12]  уже все сказал...


 
Dennis I. Komarov ©   (2009-02-20 16:09) [15]

Обясните мне, плз, зачем контролу 50000 записей?


 
Sergey13 ©   (2009-02-20 16:15) [16]

> [15] Dennis I. Komarov ©   (20.02.09 16:09)

Так больше нету. 8-)


 
Ega23 ©   (2009-02-20 16:16) [17]


> Обясните мне, плз, зачем контролу 50000 записей?


Поместить их в мемо, чего непонятного?


 
Игорь Шевченко ©   (2009-02-20 16:17) [18]


> Ega23 ©   (20.02.09 13:00) [2]
> +
> lst.BeginUpdate;
> lst.EndUpdate;


нафига ?


 
Anatoly Podgoretsky ©   (2009-02-20 16:22) [19]

> Ega23  (20.02.2009 15:34:11)  [11]

C такой, что если будет ошибка во внешнем блоке, а именно там DisableControls, то EnableControls не отработает.


 
Dennis I. Komarov ©   (2009-02-20 16:29) [20]


> Поместить их в мемо, чего непонятного?

А я грешным делом подумал в ComboBox или ListBox ;)

Может автор все-таки откликнется...


 
sniknik ©   (2009-02-20 16:32) [21]

> нафига ?
на одну проверку в 2х процедурах меньше.
if (FUpdateCount = 0) and Assigned(...) then ...
если FUpdateCount = 0 то Assigned не будет проверятся. ну и потом ради единообразия, раз много добавляешь значит должно быть отключено.
и неизвестно от чего Items (то что Ega23 заменил на lst).


 
Ega23 ©   (2009-02-20 16:38) [22]


> C такой, что если будет ошибка во внешнем блоке, а именно
> там DisableControls, то EnableControls не отработает.


Где там ошибка может быть? В DisableControls?


 
KSergey ©   (2009-02-20 16:40) [23]

> Anatoly Podgoretsky ©   (20.02.09 16:22) [19]
> C такой, что если будет ошибка во внешнем блоке, а именно там DisableControls, то EnableControls не отработает.

По-моему, вы невнимательно прочитали [2]. Непосредственно за DisableControls идет try, заканчивайющийся finaly с Enable.


 
Игорь Шевченко ©   (2009-02-20 16:56) [24]

sniknik ©   (20.02.09 16:32) [21]

Зато больше на 4 строчки кода. Проверки выполняются мгновенно, а код читать труднее. Несогласная я.


 
MsGuns ©   (2009-02-21 18:35) [25]

Чтобы не тормозило, нужно блокировать все события датасета, а также его коллекции филдов, что иногда бывает затруднительно. ИМХО, проще создать клон датасета и по нему "бегать", не "напрягая" отображаемые контролы.



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

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

Наверх




Память: 0.52 MB
Время: 0.009 c
15-1234445454
desc
2009-02-12 16:30
2009.04.12
Как корректно реализовать цикл по датам ?


2-1235165863
Mops
2009-02-21 00:37
2009.04.12
TWebBrowser


2-1235554500
Scot Storch
2009-02-25 12:35
2009.04.12
Сохранить результа запроса в список


15-1234181465
desc
2009-02-09 15:11
2009.04.12
Где в Мазиле расположен КЭШ ?


2-1235468723
Korbit
2009-02-24 12:45
2009.04.12
Получить данные S.M.A.R.T от HDD