Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > БД в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 05.02.2007, 16:55   #1
Nowichok
Пользователь
 
Регистрация: 23.11.2006
Сообщений: 53
По умолчанию Последовательный поиск в БД

Привет всем! Вопросы идут потоком :

хочу сделать поиск по БД. Через Locate не получается, т.к. я не могу
сделать последовательный поиск. Для последовательного поиска вроде
поможет Seek, но его нельзя использовать с AdoQuery.
Вообще я изначалньо открывал базы через AdoTable. Потом, как
понадобились запросы, понял ,что лучше через AdoQuery делать. Знаю,
что есть другие компоненты ADO для работы, но я не знаю, в чём их принципиальная разница.
Поиск желательно делать неточный, т.е. по вхождению части слова.
Nowichok вне форума Ответить с цитированием
Старый 05.02.2007, 20:01   #2
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

Любое руководство по SQL, оператор SELECT с условием LIKE.
Такой вопрос недавно уже рассматривался, поиск на форуме по слову LIKE. Там есть подробные ответы.
Для "потока вопросов". Повнимательнее выбирай тему. Этот вопрос не имеет отношения к "Общим вопросам Дельфи", а напрямую связан с "БД в Delphi". Не надо мусорить и совать свои вопросы абы куда...

Последний раз редактировалось mihali4; 05.02.2007 в 20:05.
mihali4 вне форума Ответить с цитированием
Старый 05.02.2007, 20:19   #3
Nowichok
Пользователь
 
Регистрация: 23.11.2006
Сообщений: 53
По умолчанию

Сорри, признаю свою вину, прежнюю тему создал в разделе про БД, а тут меня проглючило.
СПС за ответ, пойду юзать поиск. Просто SQL знаю краем, основы
Nowichok вне форума Ответить с цитированием
Старый 06.02.2007, 14:04   #4
Таня84
Пользователь
 
Аватар для Таня84
 
Регистрация: 20.01.2007
Сообщений: 38
По умолчанию

Попробуй так. Только это через запрос BDE но поиск производит по вхождению части слова

procedure TForm2.N8Click(Sender: TObject);
var
surname: string[30]; Вместо Surname пишешь поле таблицы по которому производишь поиск
begin
Surname:=InputBox(Поиск сотрудников по фамилии,
'Укажите фамилию и щелкните на OK.', '');
if surname <> ''
then
begin
with Query1 do begin
Close;
SQL.Clear;
SQL.Add('SELECT surname, Name, patron, birth_date, natio, photo, gorod, adres, sex, birthplace, pasport, telefon, RNN, SIK, Citizen'); // Здесь указываешь поля таблицы, которые будут на форме
SQL.Add('FROM ":Otdel_Kadrov:stuff.db"'); тут пишешь Алиас и название базы
SQL.Add('WHERE');
SQL.Add('LOWER(Surname) like LOWER ("%'+ surname + '%")');
SQL.Add('ORDER BY Name,birth_date, Surname');
Open;
end;
if Query1.RecordCount <> 0 then
DataSource1.DataSet:=Query1
else begin
ShowMessage('В БД нет записей, удовлетворяющий критерию запроса.');
DataSource1.DataSet:=Table1;
end;
end;
end;
Таня84 вне форума Ответить с цитированием
Старый 06.02.2007, 18:54   #5
Nowichok
Пользователь
 
Регистрация: 23.11.2006
Сообщений: 53
По умолчанию

хм....
Это всё даёт мне отдельный набор записей.
А я хочу, чтобы в текущем наборе был переход от одной записи к другой.
Т.е. все записи на месте, а переход только между темИ ,которые нужны (как поиск в Excel'е, к примеру).
А то если использовать SQL или фильтр, то создаётся отдельный набор данных. А это не нужно...
Или можно как-то из нового набора узнать положение записи в текущем ?
Nowichok вне форума Ответить с цитированием
Старый 06.02.2007, 23:59   #6
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

Иди в хэлп по TTable и смотри его методы. Например, FindNearest должен подойти. Там почти на все методы есть готовые примеры.
mihali4 вне форума Ответить с цитированием
Старый 10.02.2007, 17:22   #7
Nowichok
Пользователь
 
Регистрация: 23.11.2006
Сообщений: 53
По умолчанию

Цитата:
Сообщение от mihali4 Посмотреть сообщение
Иди в хэлп по TTable и смотри его методы. Например, FindNearest должен подойти. Там почти на все методы есть готовые примеры.
А если я использую AdoQuery ?
через TTable никак не получается, т.к. поиск должен быть и в простом наборе, и в отсортированном по какому-нибудь полю. Внимание падает на свойство компонента TAdoquery : DataSource , Вроде бы оно для тогО, чтобы переправлять запросы. Я сам не понимаю в этом...
Nowichok вне форума Ответить с цитированием
Старый 10.02.2007, 21:55   #8
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

Цитата:
А если я использую AdoQuery ?
И TAdoQuery, и TTable имеют общего предка - TDataSet.
А у него есть метод FindField - поиск по содержимому поля. Правда, не пробовал, будет ли в связке с ним работать FindNext (это, вроде, только для фильтров).
Так что мне кажется, что придется делать простым перебором - AdoQuery.Next и проверять какое-то поле на соответствие заданному содержимому.
Насколько я помню, готовых методов под такую задачу нет. Вернее есть - поиск по ключу, но Ado его, кажется, не поддерживает.
Такие вот издержки использования ADO. С BDE такие вещи реализуются гораздо проще.
Цитата:
DataSource , Вроде бы оно для тогО, чтобы переправлять запросы
???
Это всего-навсего интерфейс между таблицами и элементами, способными отображать данные, не более того...
Какое перенаправление запросов????

Последний раз редактировалось mihali4; 10.02.2007 в 21:59.
mihali4 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Поиск Witaliy Общие вопросы Delphi 1 01.05.2008 18:42
Edit. Последовательный переход... MoonLit Общие вопросы Delphi 22 13.02.2008 20:57
Поиск по БД. Шурик БД в Delphi 1 18.09.2007 02:04
Последовательный порт RS-232 LepihinMS Общие вопросы Delphi 4 23.06.2007 00:53
Последовательный порт? Lexx Общие вопросы Delphi 4 10.05.2007 10:50