AOOQuery.Filter := 'Field1 LIKE ''%' + SomeFilterValue + '%''';
ADOQuery.Filtered := True;
Последовательный поиск в БД
Хочу сделать поиск по БД. Через Locate неполучается, т.к. я не могу
сделать последовательный поиск. Для последовательного поиска вроде
поможет Seek, но его нельзя использщовать с AdoQuery.
Вообще я изначалньо открывал базы через AdoTable. Потом, как
понадобились запросы, понял ,что лучше через AdoQuery делать. Знаю,
что есть другие компоненты ADO для работы, но я не знаю, в чём их принципиальная разница.
Поиск желательно сделать неточныЙ, т.е. по вхождению в слово/предложение
Я чесно говоря не совсем понял что значит "последовательный поиск". Но поиск по вхождению (то есть по частичному совпадению), вполне осуществим и с помощью Locate. Просто задай в качестве одного из параметров поиска loPartialKey.
Т.е. если есть 2 записи
2
22
то при поиске "2" надётся только первая запись. Надо, чтобы при повторном нажати на кнопку (эту или другую), находилась следующая запись, удовлетворяющая изначальным условиям
Берём ADOQuery. Формируем запрос с параметрами. Получаем требуемый набор данных и прогоняем его от первой до последней строки.
Т.е. просто фильтруешь все записи по нужному значению, например так:
Код:
эти все примеры дают мне отдельный набор записей.
А я хочу, чтобы в текущем наборе был переход от одной записи к другой.
Т.е. все записи на месте, а переход только между темИ ,которые нужны (как поиск в Excel'е, к примеру).
А то если использовать SQL или фильтр, то создаётся отдельный набор данных. А это не нужно...
Или можно как-то из нового набора узнать положение записи в текущем ?
В обоих случаях (и при использовании SQL и тем более при использовании фильтра) связь с исходными данными не теряется. Ты можешь спокойно редактировать или делать что-то еще с этими данными, и все это перенесется и на исходные данные. Особенно при использовании фильтра, тут вообще у тебя отдельный набор данных не создается, просто показываются не все записи таблицы.
Цитата: SerMax
хм....
эти все примеры дают мне отдельный набор записей.
А я хочу, чтобы в текущем наборе был переход от одной записи к другой.
Т.е. все записи на месте, а переход только между темИ ,которые нужны (как поиск в Excel'е, к примеру).
А то если использовать SQL или фильтр, то создаётся отдельный набор данных. А это не нужно...
Или можно как-то из нового набора узнать положение записи в текущем ?
эти все примеры дают мне отдельный набор записей.
А я хочу, чтобы в текущем наборе был переход от одной записи к другой.
Т.е. все записи на месте, а переход только между темИ ,которые нужны (как поиск в Excel'е, к примеру).
А то если использовать SQL или фильтр, то создаётся отдельный набор данных. А это не нужно...
Или можно как-то из нового набора узнать положение записи в текущем ?
Тогда реализуй поиск вручную. С проходом по каждой записи, начиная с n-ой, и проверкой условия поиска.
Цитата: Sagittarius
Тогда реализуй поиск вручную. С проходом по каждой записи, начиная с n-ой, и проверкой условия поиска.
Ну вот, видимо, придётся...
Можно, (если можно :)) заиспользовать функцию, Lookup для любого TDataSet, а потом последовательно переходить по результатам с помощью Locate.
Можно (криво, но стопудово) выбрать другим запросом ключи к записям, которые ты собираешся искать, а потом опять же переходить с помошью Locate по результатам.
Next - это ну очень плохой вариант.