Показать сообщение отдельно
  #6  
Старый 10.10.2008, 19:54
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,096
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Ну куда подробнее-то?
Поиск заключается в том, что ты проверяешь данные на наличие некоторого шаблона, указанного пользователем. Т.е. пользователь вводит некоторый шаблон, а механизм поиска проходит по всем данным и пытается определить, соответсвуют данные этому шаблону или нет.

Естественно, рассматривается клиентский поиск. С поиском с помощью запросов (фактически, тут уже речь идет о фильтрации данных) ситуация в принцпе похожа, но там всю работу выполняет сервер БД, а тебе надо просто построить грамотный запрос.

Теперь возвращаемся к нашему случаю.
у тебя есть нетоторый источник данных (TTable, TQuery, TADOQuery и т.д., DataSet, короче), в котором открыт некоторый набор записей. В общем случае тебе надо перебрать все записи и все поля в каждой записи в поисках совпадения с введенным пользователем шаблоном.
Реализуется это, как не трудно догадаться, с помощью вложенных циклов. Внешний цикл перебирает записи, внутренний - поля. Т.к. в Дельфи нет итераторов и им подобных конструкций (для особо умных: я знаю, что их вполне можно реализовать своими силами или скачать готовые, однако стрелять из пушки по воробъям не стоит, не та задача), то внешний цикл реализуется в виде цикла While, внутренний - For (учитывая конструктивные особенности соответсвующих классов). почему не наоборот? Так получается быстрее. поверь на слово.
Внутри циклов идет собственно выяснение совпадения с шаблоном пользователя. Если совпадение обнаружено (в данном примере регистрозависимое вхождение подстроки), то перебор прекращается. Хитрая конструкция с флагом и двумя break'ами предназначена для корректного выхода из циклов. Все.

по поводу печати - берешь репортер, берешь книжку и читаешь и пробуешь.
Ответить с цитированием