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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 24.08.2008, 17:42   #1
Toska
 
Регистрация: 06.08.2008
Сообщений: 3
Печаль Как сделать сортировку (поиск) Delphi+Access

Народ! помогите написать сортировку или поиск, не знаю как это назвать. Допустим у меня в поле "Фамимлия" находятся много Ивановых, Петровых и т.д. и ввожу в TEdit букву "И" и все эти фамилии отфтльтровываются, дальше ввожу "Ив" и все фамилии начинающиеся на ИВ отфильтровываются. Как такое написать? Если можно, напишите код.
У меня есть такой
<code>
procedure TForm3.Edit1Change(Sender: TObject);
begin
if Length (Edit1.Text)>0 then
DataModule1.map2.Filtered:=true
else
DataModule1.map2.Filtered:=false;
DataModule1.map2.Filter:='Фамилия>' ''+Edit1.Text+'''';
end;
</code>
но он ищет не так как надо, а приближенные значения. А если написать ИВАНОВ то все эти фамилии исчезают.
Toska вне форума Ответить с цитированием
Старый 24.08.2008, 18:34   #2
Aristarh Dark
Форумчанин
 
Регистрация: 07.08.2007
Сообщений: 154
По умолчанию

Лично я никогда не задаю свойство Filter, а использую событие OnFilterRecord. Вот кусок кода из программы, SpeedSearch - как раз тот Edit в который вводится текст:
Код:
procedure TReferenceForm.FilterRecord(DataSet: TDataSet; var Accept: Boolean);
//+-----------------------------------------------------------------------------
// Фильтрует справочник по полю быстрого доступа
//
// Aristarh Dark
//------------------------------------------------------------------------------
begin
  Accept:=pos(AnsiUpperCase(SpeedSearch.Text),AnsiUpperCase(DataSet.Fields[GridFindColumn].AsString))>0
end;
Aristarh Dark вне форума Ответить с цитированием
Старый 24.08.2008, 21:18   #3
Toska
 
Регистрация: 06.08.2008
Сообщений: 3
По умолчанию

А где взять это событие OnFilterRecord
Toska вне форума Ответить с цитированием
Старый 25.08.2008, 02:05   #4
Максим_Леонидович
Пользователь
 
Регистрация: 22.07.2008
Сообщений: 49
По умолчанию

Я делал так:

Код:
procedure TForm1.Edit1Change(Sender: TObject);
begin
  DatMod.ADOQuery1.Active:=false;
  DatMod.ADOQuery1.SQL.Clear;
  DatMod.ADOQuery1.SQL.Add('SELECT *');
  DatMod.ADOQuery1.SQL.Add('FROM pasport_data');
  DatMod.ADOQuery1.SQL.Add('WHERE Famil_p Like '''+Edit1.Text+'''+'''+Label1.Caption+'''');
  DatMod.ADOQuery1.SQL.Add('AND Name_p Like '''+Edit2.Text+'''+'''+Label1.Caption+'''');
  DatMod.ADOQuery1.SQL.Add('AND Otchestvo_p Like '''+Edit3.Text+'''+'''+Label1.Caption+'''');
  DatMod.ADOQuery1.Active:=true;
end;
В Label1 у меня хранится символ %
В Edit1,2,3 ищешь по фамилии или имени или отчеству.
согласен, что способ не самый лучший, да и зачем изобретать велосипед, когда уже он есть. Но пока мне легче извратиться и придумать что-то вроде выше изложенного, чем воспользоваться продвинутой, но не понятной пока FilterRecord
По крайней мере результат тот же.
Максим_Леонидович вне форума Ответить с цитированием
Старый 25.08.2008, 14:37   #5
Roof
Форумчанин
 
Аватар для Roof
 
Регистрация: 01.02.2007
Сообщений: 785
По умолчанию

нну символ % можно ведь посто добавить в запрос
Label1 тогда не нужен.
Изо всей благодати
В руках крепко сжатых
Я донесу только капли
Roof вне форума Ответить с цитированием
Старый 25.08.2008, 19:08   #6
Gorychev
Участник клуба
 
Аватар для Gorychev
 
Регистрация: 08.03.2008
Сообщений: 1,537
По умолчанию

Почитайте тут
Gorychev вне форума Ответить с цитированием
Старый 28.08.2008, 22:32   #7
Максим_Леонидович
Пользователь
 
Регистрация: 22.07.2008
Сообщений: 49
По умолчанию

Цитата:
нну символ % можно ведь посто добавить в запрос
Label1 тогда не нужен.
просто изначально я не знал как вставить символ ' в текст фильтра. потом когда узнал, стал использовать не фильтр а СКЛ запрос. а код было лень переделывать, и я в Label1 вставил % ))))
Максим_Леонидович вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Помогите пожалуйста сделать поиск по базе данных в форме! Access 2003 LilijaSt Microsoft Office Access 19 25.12.2010 10:13
Помогите переделать файловую сортировку на сортировку динамич. списков Taisja Помощь студентам 2 15.06.2008 16:10
StringGrid сделать сортировку по алфавиту Римма Компоненты Delphi 6 12.10.2007 16:15