Форум: "Начинающим";
Текущий архив: 2009.06.07;
Скачать: [xml.tar.bz2];
ВнизФильтрация по нескольким полям Найти похожие ветки
← →
Роман (2009-04-20 20:22) [0]Здравствуйте. У меня имеется таблица. Фильтрую данный следующим образом:
if Edit1.Text<>"" then
ADOTable3.Filter:="Год="+Edit1.Text;
ADOTable3.Filtered:=true;
но проблема заключается в том что таблица состоит из 16 полей. И имеется 12 Editов. Каждому из которых соответствует определенное поле. Как мне одновременно фильтровать данные по нескольким полям. Но только по тем, которые заполнил пользователь. Если же Edit пуст, в таком случае соответствующее ему поле при фильтрации не трогать. Возможен конечно вариант описать все возможные сочетания заполненных Editoв, но это нереально т.к. их в моём случае получится 12!=............... ))Подскажите пожалуйста как ещё можно решить мою проблему. Заранее спасибо.
← →
Виталий Панасенко(дом) (2009-04-20 22:29) [1]Удалено модератором
← →
Роман (2009-04-20 22:43) [2]Удалено модератором
← →
Игорь Шевченко © (2009-04-20 23:12) [3]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-ов и то же самое в единственном цикле :)
← →
Anatoly Podgoretsky © (2009-04-20 23:29) [4]> Роман (20.04.2009 20:22:00) [0]
Соединяй условия через AND, но замучаешься работать с таким количестве полей в условии, если вообще дождешься результата.
← →
clickmaker © (2009-04-21 12:49) [5]> как ещё можно решить мою проблему. Заранее спасибо
в цикле можно. Либо создав массив ссылок на эдиты, либо через FindControl
← →
clickmaker © (2009-04-21 12:50) [6]либо же, положив эти эдиты на панель для удобства перебора, через ее свойство Controls
← →
Новичок (2009-04-22 02:01) [7]Почему просто не прописать в каждом эдите по событию 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 полями.
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2009.06.07;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.006 c