![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как организовать поиск "Найти далее"?
Сергей © (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]перебором