Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2009.06.07;
Скачать: CL | DM;

Вниз

Фильтрация по нескольким полям   Найти похожие ветки 

 
Роман   (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;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.01 c
15-1238782378
Petr V. Abramov
2009-04-03 22:12
2009.06.07
ave отечественый производитель ::)


15-1238605370
Кто б сомневался
2009-04-01 21:02
2009.06.07
April 01: с праздником друзья!


15-1237999517
Городской Шаман
2009-03-25 19:45
2009.06.07
Offline репликация данных своими руками.


4-1210775223
re_qas
2008-05-14 18:27
2009.06.07
ADSI в DLL


15-1238739088
Patrick
2009-04-03 10:11
2009.06.07
Представление данных