![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
быстро пробежать по записям
321 © (2009-02-20 12:26:00)Есть ли способ быстро пробежать по записям в таблице:
В таблице 50 000 записей.
делаю так, но на все затрачивается около минуты:
FieldID := Query.FieldByName('ID');
while not Query.Eof do
begin
Items.add(FieldID.AsString);
cmp_QueryByField_.Next;
end;
MsGuns (2009-02-21 18:35:00) [1]Чтобы не тормозило, нужно блокировать все события датасета, а также его коллекции филдов, что иногда бывает затруднительно. ИМХО, проще создать клон датасета и по нему "бегать", не "напрягая" отображаемые контролы.
Игорь Шевченко (2009-02-20 16:56:00) [2]sniknik © (20.02.09 16:32) [21]
Зато больше на 4 строчки кода. Проверки выполняются мгновенно, а код читать труднее. Несогласная я.
KSergey (2009-02-20 16:40:00) [3]> Anatoly Podgoretsky © (20.02.09 16:22) [19]
> C такой, что если будет ошибка во внешнем блоке, а именно там DisableControls, то EnableControls не отработает.
По-моему, вы невнимательно прочитали [2]. Непосредственно за DisableControls идет try, заканчивайющийся finaly с Enable.
Ega23 (2009-02-20 16:38:00) [4]
> C такой, что если будет ошибка во внешнем блоке, а именно
> там DisableControls, то EnableControls не отработает.
Где там ошибка может быть? В DisableControls?
sniknik (2009-02-20 16:32:00) [5]> нафига ?
на одну проверку в 2х процедурах меньше.
if (FUpdateCount = 0) and Assigned(...) then ...
если FUpdateCount = 0 то Assigned не будет проверятся. ну и потом ради единообразия, раз много добавляешь значит должно быть отключено.
и неизвестно от чего Items (то что Ega23 заменил на lst).
Dennis I. Komarov (2009-02-20 16:29:00) [6]
> Поместить их в мемо, чего непонятного?
А я грешным делом подумал в ComboBox или ListBox ;)
Может автор все-таки откликнется...
Anatoly Podgoretsky (2009-02-20 16:22:00) [7]> Ega23 (20.02.2009 15:34:11) [11]
C такой, что если будет ошибка во внешнем блоке, а именно там DisableControls, то EnableControls не отработает.
Игорь Шевченко (2009-02-20 16:17:00) [8]
> Ega23 © (20.02.09 13:00) [2]
> +
> lst.BeginUpdate;
> lst.EndUpdate;
нафига ?
Ega23 (2009-02-20 16:16:00) [9]
> Обясните мне, плз, зачем контролу 50000 записей?
Поместить их в мемо, чего непонятного?
Sergey13 (2009-02-20 16:15:00) [10]> [15] Dennis I. Komarov © (20.02.09 16:09)
Так больше нету. 8-)
Dennis I. Komarov (2009-02-20 16:09:00) [11]Обясните мне, плз, зачем контролу 50000 записей?
KSergey (2009-02-20 15:41:00) [12]ну вот, sniknik © (20.02.09 15:39) [12] уже все сказал...
KSergey (2009-02-20 15:40:00) [13]> Ega23 © (20.02.09 13:00) [2]
> Query.DisableControls;
> Query.EnableControls;
Вероятнее всего это есть смысл сделать у контрола, в котром набиваются Items. Хотя если к Query что-то привязано - то и там не плохо, конечно.
sniknik (2009-02-20 15:39:00) [14]Ega23 © (20.02.09 13:00) [2]
+
lst.BeginUpdate;
lst.EndUpdate;
Ega23 (2009-02-20 15:34:00) [15]
> DisableControls и EnableControls должны быть в одном блоке try
С какого перепугу?
Anatoly Podgoretsky (2009-02-20 14:54:00) [16]> Ega23 (20.02.2009 13:00:02) [2]
DisableControls и EnableControls должны быть в одном блоке try
Anatoly Podgoretsky (2009-02-20 14:54:00) [17]> Ega23 (20.02.2009 13:00:02) [2]
DisableControls и EnableControls должны быть в одном блоке try
Sergey13 (2009-02-20 14:03:00) [18]> [0] 321 (20.02.09 12:26)
> на все затрачивается около минуты
> while not Query.Eofdo
> begin
> Items.add(FieldID.AsString);
> cmp_QueryByField_.Next;
> end;
ИМХО странно что вообще заканчивается.
Dennis I. Komarov (2009-02-20 13:44:00) [19]Ах, забыл - телепатор :)
Ega23 (2009-02-20 13:29:00) [20]
> Я всмысле, мало ли чего там за Items...
>
99% что TStrings