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

Вниз

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

Наверх





Память: 0.48 MB
Время: 0.044 c
9-1162110637
Zlodey
2006-10-29 11:30
2007.10.28
DelphiX


15-1191352478
koha
2007-10-02 23:14
2007.10.28
почему форум тормозит?


4-1177575482
capkoh
2007-04-26 12:18
2007.10.28
Повторное открытие диалога


2-1191920909
Tron
2007-10-09 13:08
2007.10.28
Как подключить сетевой принтер?


2-1191309484
Alex7
2007-10-02 11:18
2007.10.28
Desc - сортировка ADODataSet используя IndexFieldNames





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