|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
05.02.2007, 16:55 | #1 |
Пользователь
Регистрация: 23.11.2006
Сообщений: 53
|
Последовательный поиск в БД
Привет всем! Вопросы идут потоком :
хочу сделать поиск по БД. Через Locate не получается, т.к. я не могу сделать последовательный поиск. Для последовательного поиска вроде поможет Seek, но его нельзя использовать с AdoQuery. Вообще я изначалньо открывал базы через AdoTable. Потом, как понадобились запросы, понял ,что лучше через AdoQuery делать. Знаю, что есть другие компоненты ADO для работы, но я не знаю, в чём их принципиальная разница. Поиск желательно делать неточный, т.е. по вхождению части слова. |
05.02.2007, 20:01 | #2 |
*
Старожил
Регистрация: 22.11.2006
Сообщений: 9,201
|
Любое руководство по SQL, оператор SELECT с условием LIKE.
Такой вопрос недавно уже рассматривался, поиск на форуме по слову LIKE. Там есть подробные ответы. Для "потока вопросов". Повнимательнее выбирай тему. Этот вопрос не имеет отношения к "Общим вопросам Дельфи", а напрямую связан с "БД в Delphi". Не надо мусорить и совать свои вопросы абы куда... Последний раз редактировалось mihali4; 05.02.2007 в 20:05. |
05.02.2007, 20:19 | #3 |
Пользователь
Регистрация: 23.11.2006
Сообщений: 53
|
Сорри, признаю свою вину, прежнюю тему создал в разделе про БД, а тут меня проглючило.
СПС за ответ, пойду юзать поиск. Просто SQL знаю краем, основы |
06.02.2007, 14:04 | #4 |
Пользователь
Регистрация: 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; |
06.02.2007, 18:54 | #5 |
Пользователь
Регистрация: 23.11.2006
Сообщений: 53
|
хм....
Это всё даёт мне отдельный набор записей. А я хочу, чтобы в текущем наборе был переход от одной записи к другой. Т.е. все записи на месте, а переход только между темИ ,которые нужны (как поиск в Excel'е, к примеру). А то если использовать SQL или фильтр, то создаётся отдельный набор данных. А это не нужно... Или можно как-то из нового набора узнать положение записи в текущем ? |
06.02.2007, 23:59 | #6 |
*
Старожил
Регистрация: 22.11.2006
Сообщений: 9,201
|
Иди в хэлп по TTable и смотри его методы. Например, FindNearest должен подойти. Там почти на все методы есть готовые примеры.
|
10.02.2007, 17:22 | #7 | |
Пользователь
Регистрация: 23.11.2006
Сообщений: 53
|
Цитата:
через TTable никак не получается, т.к. поиск должен быть и в простом наборе, и в отсортированном по какому-нибудь полю. Внимание падает на свойство компонента TAdoquery : DataSource , Вроде бы оно для тогО, чтобы переправлять запросы. Я сам не понимаю в этом... |
|
10.02.2007, 21:55 | #8 | ||
*
Старожил
Регистрация: 22.11.2006
Сообщений: 9,201
|
Цитата:
А у него есть метод FindField - поиск по содержимому поля. Правда, не пробовал, будет ли в связке с ним работать FindNext (это, вроде, только для фильтров). Так что мне кажется, что придется делать простым перебором - AdoQuery.Next и проверять какое-то поле на соответствие заданному содержимому. Насколько я помню, готовых методов под такую задачу нет. Вернее есть - поиск по ключу, но Ado его, кажется, не поддерживает. Такие вот издержки использования ADO. С BDE такие вещи реализуются гораздо проще. Цитата:
Это всего-навсего интерфейс между таблицами и элементами, способными отображать данные, не более того... Какое перенаправление запросов???? Последний раз редактировалось mihali4; 10.02.2007 в 21:59. |
||
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Поиск | 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 |