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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 24.06.2010, 12:14   #1
RinoVaciO
 
Регистрация: 27.05.2010
Сообщений: 8
По умолчанию Комплексный поиск в таблице

Доброго времени суток, уважаемые программеры!
В общем: BD - Access, через ADO.
Выводим через ADOTable таблицу в BDGrid, в таблице 5 полей, Фамилия, Имя, Отчество, Номер паспорта, Дата рождения. С помощью компонентов Edit необходимо задавать значения, с помощью которых происходила бы фильтрация (соответственно поиск). Проблем в программировании поиска по одному полю нет, в обработчик OnChange для строки ввода(Edit1) мы пишем следующее:
Код:
procedure TForml.Edit1Change(Sender:   TObject);
 begin
if  Length(Edit1.Text)>0 then DataModule2.BookTable.Filtered:=true
                                              else DataModule2.BookTable.Filtered:=false;
DataModule2.BookTable.Filter:='Фамилия>'''+Edit1.Text+'''',
end;
Но корректно поиск начинает работать только после того, как в обработчике OnFilterRecord таблицы BookTable прописать следующее:
Код:
procedure TDataModulel.BookTableFilterRecord(DataSet: TDataSet; var Accept:   Boolean); 
begin
Accept:=false;
if copy(BookTableFamilia.AsString,1,Length(Forml.Edit1.Text))= Forml.Edit1.Text then Accept:=true;
end;
В данном варианте настроено только для поиска по фамилии, а нужно настроить комплексный поиск, т.е. для каждого поля есть свой Edit, и после записи в них поискового параметра должны и отображаться соответствующие значения. Спасибо.
RinoVaciO вне форума Ответить с цитированием
Старый 25.06.2010, 07:35   #2
rdama
Форумчанин
 
Аватар для rdama
 
Регистрация: 25.07.2009
Сообщений: 533
По умолчанию

Первый Edit
Код:
  IF Trim(UserEd.Text)<>'' THEN
  begin
    Rep_TBL.Filtered:=False;
    Rep_TBL.Filter:=Rep_TBL.FieldByName('ShipName').FullName+' LIKE '+QuotedStr(
                   '%'+UserEd.Text+'%');
    Rep_TBL.Filtered:=true;
  end
  ELSE Rep_TBL.Filtered:=False;
Второй Edit
Код:
  IF Trim(IDEd.Text)<>'' THEN
  begin
    Rep_TBL.Filtered:=False;
    Rep_TBL.Filter:=Rep_TBL.FieldByName('ID').FullName+' LIKE '+
    QuotedStr('%'+IDEd.Text+'%');
    Rep_TBL.Filtered:=true;
  end
  ELSE Rep_TBL.Filtered:=False;
Что в первом случае на OnChange в edit, что во втором.
И события на DataSete нет.
Маразм крепчал. Еноты пели...
R-style Dataknowlege Access Member Account (RDAMA)
rdama вне форума Ответить с цитированием
Старый 26.06.2010, 10:13   #3
RinoVaciO
 
Регистрация: 27.05.2010
Сообщений: 8
По умолчанию

Здорово! Отличный вариант без использования события на DataSet. Спасибо. НО Всё таки в комплексе этот поиск не работает, т.е. забивая сначала в Edit1 параметр поиска он фильтрует таблицу корректно, а после ввода в Edit2 он начинает отдельный поиск, хотя мне необходимо, чтобы он уже искал только из тех, которые высветились по первому запросу. Надеюсь понятно объяснил
И ещё этот код не работает с цифровой записью(не ищет по дате рождения) выдавая ошибку "Не удатся открыть фильтр". Помогите пожалуйста.

Последний раз редактировалось RinoVaciO; 26.06.2010 в 10:18.
RinoVaciO вне форума Ответить с цитированием
Старый 28.06.2010, 06:26   #4
rdama
Форумчанин
 
Аватар для rdama
 
Регистрация: 25.07.2009
Сообщений: 533
По умолчанию

По дате не проверял. Необходимости уже давно не было. Но я думаю если по сидеть подумать и это можно решить.
А на счет составного фильтра.
Тебе просто надо перед тем как вешать новый фильтр сохранить старый и сложить его с новым.
Либо применять фильтр к уже отфильтрованному датасету.
Т.е. необходимо убрать строку
Код:
Rep_TBL.Filtered:=False;
По логике должно работать...
Маразм крепчал. Еноты пели...
R-style Dataknowlege Access Member Account (RDAMA)
rdama вне форума Ответить с цитированием
Старый 30.06.2010, 15:17   #5
Kemperok
Пользователь
 
Регистрация: 04.06.2010
Сообщений: 25
По умолчанию

Поищи компонент CGrid в нем есть всевозможные фильтры, поиск по любому из столбцов, сортировка столбцов, так же позволяет сортировать найденые и отфильтрованные записи, при этом не обращаясь к базе данных, каждый раз когда вы выполняете подобные действия.
Kemperok вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Поиск в таблице k1r1ch Общие вопросы Delphi 1 30.06.2009 15:57
Поиск в таблице бд Aндрей Помощь студентам 2 27.04.2009 09:13
поиск в таблице puma Помощь студентам 3 22.04.2008 23:56
Комплексный Tan RIO Помощь студентам 1 12.02.2008 22:19
Поиск в таблице БД фЁдОр БД в Delphi 13 14.11.2007 10:05