Текущий архив: 2007.10.28;
Скачать: CL | DM;
Внизlocate+настройка поиска Найти похожие ветки
← →
em240 © (2007-10-05 11:19) [0]Возможно ли, с помощью локейта локейт после нахождения записи, при следующем использовании локейт он не искал сначала, а искал начиная со следующей записи.
← →
em240 © (2007-10-05 11:44) [1]Возможно ли, после Locate, при следующем Locate искать не сначала, а начиная со следующей записи.
← →
Вася Правильный (2007-10-05 12:01) [2]нет
← →
Pong (2007-10-05 14:20) [3]Вася Правильный (05.10.07 12:01) [2]
нет
Ну зачем же так категорично. Раз надо, то:var
sFilter: string;
sOldFilter: string;
sAddFilter: string;
bOldFiltered: boolean;
begin
if DS.Filtered then
sAddFilter := DS.Filter
else
sAddFilter := "";
bOldFiltered := DS.Filtered;
sOldFilter := DS.OldFilter;
try
DS.Filter := sAddFilter;
DS.Filtered := true;
sFilter := "";
while DS.Locate("Name", "em240", []) do
begin
// Обработка найденной записи
{...}
// Скрываем найденную запись
sFilter := sFilter + " AND (ID <> " + DS.FieldByName("ID").AsStirng + ")"; //*
DS.Filter := "(" + sAddFilter + ")" + sFilter;
end;
finally
DS.Filter := sOldFilter;
DS.Filtered := bOldFiltered;
end;
end;
*Откорректировать в зависимости от типа данных первичного ключа
← →
Вася Правильный (2007-10-05 16:22) [4]и на кой нужен такой геморрой?
гораздо проще и полезнее просто делать Next от первой найденной (если по индексированному полю) или перебор записей
← →
Ping (2007-10-05 17:04) [5]Вася Правильный (05.10.07 16:22) [4]
Во-первых, вопрос так звучал.
Во-вторых, перебор через Next - медленный.
← →
em240 © (2007-10-05 17:17) [6]Благодарю за помощь
← →
Ega23 © (2007-10-05 17:18) [7]
> Во-вторых, перебор через Next - медленный.
А через Locate, Ъ, быстрый!
← →
Anatoly Podgoretsky © (2007-10-05 17:43) [8]> Ping (05.10.2007 17:04:05) [5]
Смешно, не представляешь как работает Locate
← →
Ping (2007-10-05 17:45) [9]А через Locate, Ъ, быстрый!
Автор не указал используемые компоненты.
Вот, к примеру, в TClientDataSet - Locate в разы быстрее перебора через Next.
← →
Ping (2007-10-05 17:46) [10]Anatoly Podgoretsky © (05.10.07 17:43) [8]
Можно смеяться?
← →
Anatoly Podgoretsky © (2007-10-05 17:48) [11]
> Locate в разы быстрее перебора через Next.
А здесь можно смеяться?
← →
Ping (2007-10-05 18:23) [12]Anatoly Podgoretsky © (05.10.07 17:48) [11]
А здесь можно смеяться?
Смеяться здесь:procedure TForm1.Button2Click(Sender: TObject);
var
Start: TDateTime;
i: integer;
begin
Start := Now;
ClientDataSet1.DisableControls;
try
WriteLog("Locate started ***");
for i := 0 to 999 do
begin
if ClientDataSet1.Locate("Name", "hfkjsdhfjk", []) then
raise Exception.Create("Something found);
end;
WriteLog("Locate duration: " + FormatDateTime("nn:ss.zzz", Now - Start));
finally
ClientDataSet1.EnableControls;
end;
end;
procedure TForm1.Button3Click(Sender: TObject);
var
Start: TDateTime;
i: integer;
begin
Start := Now;
ClientDataSet1.DisableControls;
try
WriteLog("Next started ***");
for i := 0 to 999 do
begin
ClientDataSet1.First;
while not ClientDataSet1.Eof do
begin
if (ClientDataSet1.FieldByName("Name").AsString = "hfkjsdhfjk") then
raise Exception.Create("Something found");
ClientDataSet1.Next;
end;
end;
WriteLog("Next duration: " + FormatDateTime("nn:ss.zzz", Now - Start));
finally
ClientDataSet1.EnableControls;
end;
end;
Лог:Locate started ***
Locate duration: 00:04.657
Next started ***
Next duration: 00:16.281
← →
Вася Правильный (2007-10-05 19:04) [13]
> в TClientDataSet - Locate в разы быстрее перебора через Next.
1. что-то предложенной установки фильтра я там не наблюдаю
2. коряво написан проход по датасету
3. неизвестно, какой индекс построен в CDS, а Locate использует индексы по возможности
← →
Ping (2007-10-05 19:14) [14]1. что-то предложенной установки фильтра я там не наблюдаю
2. коряво написан проход по датасету
3. неизвестно, какой индекс построен в CDS, а Locate использует индексы по возможности
Тебе надо - ты и делай. Я выдвинул утверждение и подтвердил его примером. Твои аргументы - просто треп. Напиши так, как ты считаешь нужным - и делай выводы. Для себя. Будут хорошие практические результаты - приводи тут. С радостью расширю кругозор.
← →
Anatoly Podgoretsky © (2007-10-05 19:39) [15]
> Ping (05.10.07 18:23) [12]
Здесь можно вообще кататься от смеха по полу, ты даже вопрос то не понял, а туда же со своим кодом.
← →
Leonid Troyanovsky © (2007-10-05 19:49) [16]
> Ping (05.10.07 19:14) [14]
> Я выдвинул утверждение и подтвердил его примером.
Пример не может подтвердить тезис о всеобщности.
И, сколько бы ни было таких примеров, они его не подтвердят.
Гораздо более содержательны высказывания о несуществовании.
Вот тогда пример явится подтверждением антитезиса.
--
Regards, LVT.
← →
Вася Правильный (2007-10-05 20:28) [17]
> Тебе надо - ты и делай
мне - 100 лет не надо
ты же пытаешься что-то даказать, ставя заведомо кривые эксперименты
это как джип и болид F1 сравнивать по скорости на вспаханном поле
Страницы: 1 вся ветка
Текущий архив: 2007.10.28;
Скачать: CL | DM;
Память: 0.48 MB
Время: 0.044 c