Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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
15-1238877001
Юрий
2009-04-05 00:30
2009.06.07
С днем рождения ! 5 апреля 2009 воскресенье


2-1240385450
Nucer
2009-04-22 11:30
2009.06.07
Порядок условий в конструкции if


11-1176366189
Dmitry___
2007-04-12 12:23
2009.06.07
Курсорные клавиши в Memo на форме внутри dll


2-1240384955
Лёша
2009-04-22 11:22
2009.06.07
Как организовать данные?


15-1238659736
SP
2009-04-02 12:08
2009.06.07
Route





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский