Главная страница
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-1238614397
DMM
2009-04-01 23:33
2009.06.07
Будущее Делфи?


15-1238515497
@!!ex
2009-03-31 20:04
2009.06.07
Как научить гугл понимать многоязыковые страницы?


11-1200921282
Elec3C
2008-01-21 16:14
2009.06.07
ListBox и ComboBox


15-1238616770
Артур Пирожков
2009-04-02 00:12
2009.06.07
Как вытащить звук из ютьбовского ролика?


2-1239712914
Darvin
2009-04-14 16:41
2009.06.07
Запись в файл и расход памяти