Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Фильтрация по нескольким полям [D7, access]


Роман ©   (2009-04-20 20:22:00) 

Здравствуйте. У меня имеется таблица. Фильтрую данный следующим образом:


if Edit1.Text<>'' then
 ADOTable3.Filter:='Год='+Edit1.Text;
 ADOTable3.Filtered:=true;


но проблема заключается в том что таблица состоит из 16 полей. И имеется 12 Editов.  Каждому из которых соответствует определенное поле. Как мне одновременно фильтровать данные по нескольким полям. Но только по тем, которые заполнил пользователь. Если же Edit пуст, в таком случае соответствующее ему поле при фильтрации не трогать. Возможен конечно вариант описать все возможные сочетания заполненных Editoв, но это нереально т.к. их в моём случае получится 12!=............... ))Подскажите пожалуйста как ещё можно решить мою проблему. Заранее спасибо.


Новичок   (2009-04-22 02:01:00) [1]

Почему просто не прописать в каждом эдите по событию onChange следующий код:

if Length(Edit1.Text)>0 then
ADOTable3.Filtered:=true
else
ADOTable3.Filtered:=false;
ADOTable3.Filter:='Год>='+QuotedStr(SotFilterFam.Text);

В следующем эдите будет:
if Length(Edit2.Text)>0 then
ADOTable3.Filtered:=true
else
ADOTable3.Filtered:=false;
ADOTable3.Filter:='Название_следующего_поля>='+QuotedStr(SotFilterFam.Text);

и так 12 раз

У меня так отлично работает с 5 полями.


clickmaker   (2009-04-21 12:50:00) [2]

либо же, положив эти эдиты на панель для удобства перебора, через ее свойство Controls


clickmaker   (2009-04-21 12:49:00) [3]

> как ещё можно решить мою проблему. Заранее спасибо

в цикле можно. Либо создав массив ссылок на эдиты, либо через FindControl


Anatoly Podgoretsky   (2009-04-20 23:29:00) [4]

> Роман  (20.04.2009 20:22:00)  [0]

Соединяй условия через AND, но замучаешься работать с таким количестве полей в условии, если вообще дождешься результата.


Игорь Шевченко   (2009-04-20 23:12:00) [5]

var
 FilterString: string;
begin
 FilterString := '';
 if Edit1.Text <> '' then
 begin
   if FilterString <> '' then
     FilterString := FilterString + FilterDelimiter; //Не знаю я, чем условия фильтра отделяются, в справку лень смотреть, сам посмотри
   FilterString := Edit1Field+'='+Edit1.Text; //Edit1Field - название поля, чье значение в Edit1
 end;
 if Edit2.Text <> '' then
 begin
   if FilterString <> '' then
     FilterString := FilterString + FilterDelimiter;
   FilterString := Edit2Field+'='+Edit2.Text; //Edit2Field - название поля, чье значение в Edit2
 end;
.....
 if Edit12.Text <> '' then
 begin
   if FilterString <> '' then
     FilterString := FilterString + FilterDelimiter;
   FilterString := Edit12Field+'='+Edit12.Text; //Edit12Field - название поля, чье значение в Edit12
 end;
if FilterString <> '' then
begin
  ADOTable3.Filter:=FilterString;
  ADOTable3.Filtered:=true;
end;

А потом делаешь массив из названий полей и Edit-ов и то же самое в единственном цикле :)


Роман   (2009-04-20 22:43:00) [6]

Удалено модератором


Виталий Панасенко(дом)   (2009-04-20 22:29:00) [7]

Удалено модератором


Наверх

Титульная страница Поиск, карта сайта Написать письмо