Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Как организовать поиск "Найти далее"?


Сергей ©   (2008-10-09 18:52:00) 

Использую QueADOQuery2.Locate (ColFind,trim(Edit1.Text),[loCaseInsensitive, loPartialKey]). Ищет только первое вхождение строки.  Как искать следующие вхождения? Спасибо.


sniknik   (2008-10-09 21:40:00) [1]

> Que ADOQuery2
ADO (датасет) поддерживает FindFirst/FindNext/...
которые кстати работают не перебором, а фильтром... поэтому возможны казусы, при активном локальном индексе, может найти сначала последнюю отображаемую запись а после первую (т.е. индекс при поиске не учитывается).


ПРавильный$Вася   (2008-10-09 20:59:00) [2]


> Anatoly Podgoretsky ©   (09.10.08 20:54) [14]

это на полное совпадение или на начало строки
а на вхождение, как хочет автор, - до упора


Anatoly Podgoretsky   (2008-10-09 20:54:00) [3]

> Правильный$Вася  (09.10.2008 20:42:13)  [13]

Для сортированого по полю - пока равно


Правильный$Вася   (2008-10-09 20:42:00) [4]


> Перевожу курсор на другую запись. После поиска Locate переходит
> на туже запись.

Locate всегда ищет сначала, где бы у тебя не стоял до этого указатель
еще раз - перебор, в цикле, пока не найдешь или пока не конец набора данных


MsGuns   (2008-10-09 20:41:00) [5]

http://delphimaster.ru/cgi-bin/forum.pl?id=1222845582&n=18


Anatoly Podgoretsky   (2008-10-09 20:01:00) [6]


> Сергей   (09.10.08 19:36) [9]

Ну так и есть - и где же тут перебор?


Ega23   (2008-10-09 19:55:00) [7]


> После поиска Locate переходит на туже запись.


TDataSet.Locate + F1


Сергей   (2008-10-09 19:36:00) [8]

Перевожу курсор на другую запись. После поиска Locate переходит на туже запись.

procedure TForm3.DBGrid1TitleClick(Column: TColumn);
begin
if  flagLok then ADOQuery2.Next;
ColFind:= trim(Column.FieldName);
if not ADOQuery2.Locate (ColFind,trim(Edit1.Text),[loCaseInsensitive, loPartialKey]) then
ShowMessage(Edit1.Text + ' not found in ' + ColFind)
else
begin
flagLok:=true
end;
end;


Anatoly Podgoretsky   (2008-10-09 19:26:00) [9]


> Почему же тогда курсор остается на той же записи?

Наверно у тебя ошибка в программе?


Palladin   (2008-10-09 19:22:00) [10]

потому что на другую он не переходит


Сергей   (2008-10-09 19:20:00) [11]

Почему же тогда курсор остается на той же записи?


Правильный$Вася   (2008-10-09 19:11:00) [12]


>  Как заставить Locate искать от первого вхождения до второго.

это невозможно
тебе же сказали - перебором
это значит query.Next пока не совпало


Сергей   (2008-10-09 19:10:00) [13]

Как это сделать? Как заставить Locate искать от первого вхождения до второго.
Нашел первую запись например 111111 затем вторую 11111 и так далее


Правильный$Вася   (2008-10-09 19:10:00) [14]


> Собственно, и Locate перебором работает.

в данном конкретном - да
в вообще-то - нет, при наличии индексов он их использует


Ega23   (2008-10-09 18:59:00) [15]


> Как искать следующие вхождения?


Только перебором, по-другому никак. Собственно, и Locate перебором работает.


clickmaker   (2008-10-09 18:56:00) [16]

перебором


Наверх

Титульная страница Поиск, карта сайта Написать письмо