Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 01.04.2013, 12:02
cyborgg4655 cyborgg4655 вне форума
Начинающий
 
Регистрация: 16.03.2013
Сообщения: 151
Версия Delphi: Delphi 2010
Репутация: 10
Вопрос Вопрос по ADOQuery.fliter

Можно ли сделать фильтрацию 1 таблицы одновременно с 3 фильтров?
Тоесть, у меня в таблице 3 столбца, далее есть edit.text, чекбокс и комбобокс - у каждого из них есть условия фильтрации для каждого столбца. Так вот, можно ли сделать не прибегая к многочисленным условиям IF чтобы фильтры работали параллельно? Тоесть накладывались друг на друга.

На данный момент для каждого из них у меян примерно такой код:

Код:
if (edit2.Text='') and (checkbox9.Checked=false) and (combobox15.Text<>'') then
begin {if1}
ADOQuery1.Filter:=Format('(Район LIKE ''%s'')',[combobox15.Text]);
ADOQuery1.Filtered:=True;
exit;
end;{if1}
if (edit2.Text<>'') and (checkbox9.Checked=false) and (combobox15.Text<>'') then
begin {if2}
ADOQuery1.Filter:=Format('(Район LIKE ''%s'' and Комнат ''%s'')',[combobox15.Text,edit2.Text]);
ADOQuery1.Filtered:=True;
exit;
end;{if2}
if (edit2.Text='') and (checkbox9.Checked=true) and (combobox15.Text<>'') then
begin {if3}
ADOQuery1.Filter:=Format('(Район LIKE ''%s'' and Этаж<>1)',[combobox15.Text]);
ADOQuery1.Filtered:=True;
exit;
end;{if3}
if (edit2.Text<>'') and (checkbox9.Checked=true) and (combobox15.Text<>'') then
begin {if4}
ADOQuery1.Filter:=Format('(Район LIKE ''%s'' and Комнат ''%s'' and Этаж<>1)',[combobox15.Text,edit2.Text]);
ADOQuery1.Filtered:=True;
exit;
end;{if4} if (edit2.Text='') and (checkbox9.Checked=false) and (combobox15.Text<>'') then
begin {if1-1}
ADOQuery1.Filter:=Format('(Район LIKE ''%s'')',[combobox15.Text]);
ADOQuery1.Filtered:=True;
exit;
end;{if1-1}
if (edit2.Text<>'') and (checkbox9.Checked=false) and (combobox15.Text='Все') then
begin {if2-1}
ADOQuery1.Filter:=Format('(Комнат ''%s'')',[edit2.Text]);
ADOQuery1.Filtered:=True;
exit;
end;{if2-1}
if (edit2.Text='') and (checkbox9.Checked=true) and (combobox15.Text='') then
begin {if3-1}
ADOQuery1.Filter:='Этаж<>1';
ADOQuery1.Filtered:=True;
exit;
end;{if3-1}
if (edit2.Text<>'') and (checkbox9.Checked=true) and (combobox15.Text='Все') then
begin {if4-1}
ADOQuery1.Filter:=Format('(Комнат ''%s'' and Этаж<>1)',[edit2.Text]);
ADOQuery1.Filtered:=True;
exit;
end;{if4-1}

Я думаю есть альтернатива этой грамосткости... Подскажите пожалуйста...
Ответить с цитированием
  #2  
Старый 01.04.2013, 12:14
Аватар для Mrak
Mrak Mrak вне форума
Местный
 
Регистрация: 26.01.2013
Адрес: МО
Сообщения: 438
Версия Delphi: XE2
Репутация: 17
По умолчанию

Цитата:
Сообщение от cyborgg4655
Так вот, можно ли сделать не прибегая к многочисленным условиям IF чтобы фильтры работали параллельно? Тоесть накладывались друг на друга.
насколько мне известно - нет
альтернатива IF - выбор готового текста запроса из, например, комбобокса)
__________________
Я за здоровый экстрим!
Спасибо за "спасибо")
Ответить с цитированием
  #3  
Старый 01.04.2013, 13:52
icWasya icWasya вне форума
Местный
 
Регистрация: 09.11.2010
Сообщения: 499
Репутация: 10
По умолчанию

А если подумать?
Код:
var
  F,S:String;
.....
S:='';  F:='';
if (combobox15.Text<>'') then
begin
   S:=Format('(Район LIKE ''%s'')',[combobox15.Text]); 
   if F= '' then F:= S else F:=F + 'and '+S;
end;{if1}

if (edit2.Text<>'')then
begin 
  S:=Format('(Комнат ''%s'')',[edit2.Text]);
  if F= '' then F:= S else F:=F + 'and '+S;
end;{if2}

if (checkbox9.Checked) then
begin 
  S:='(Этаж<>1)';
  if F= '' then F:= S else F:=F + 'and '+S;
end;{if3}

if F='' then begin
  ADOQuery1.Filtered:=False; 
end else begin
  ADOQuery1.Filter:=F; 
  ADOQuery1.Filtered:=True; 
end;

Только условие с комнатами непонятное
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 19:43.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter