Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2009.04.12;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.5 MB
Время: 0.006 c
2-1235452145
vegarulez
2009-02-24 08:09
2009.04.12
вопрос связи поток и DataModule


2-1235233665
Denis__
2009-02-21 19:27
2009.04.12
Прозрачность на TImage


15-1234336329
Германн
2009-02-11 10:12
2009.04.12
справочник по Си


2-1235652014
антон1243232
2009-02-26 15:40
2009.04.12
Группировка


10-1155138356
Megabyte
2006-08-09 19:45
2009.04.12
Вопрос по регистрации DCOM.





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский