Главная страница
    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
15-1234457795
Кое кто
2009-02-12 19:56
2009.04.12
Если здесь любители Астрофизики...


2-1235201278
Andrey K
2009-02-21 10:27
2009.04.12
Присвоить значение


15-1234215001
Юрий
2009-02-10 00:30
2009.04.12
С днем рождения ! 10 февраля 2009 вторник


2-1235672125
privett
2009-02-26 21:15
2009.04.12
Помогите разобраться с поинтэрами


2-1235044788
Yellow_D
2009-02-19 14:59
2009.04.12
Как работать с Data (Pointer) в компоненте TreeView?





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский