![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Фильтрация по нескольким полям [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]Удалено модератором