Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > БД в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 18.05.2010, 17:49   #1
Yuran
Форумчанин
 
Регистрация: 18.02.2008
Сообщений: 198
По умолчанию ADOTable Не работает фильтр

Здрасте.

Почему не работает этот фильтр ?
dm.ADOTable.Filter:='Статус=''На ЦОФ'' or Статус=''Своими силами'' and Позиция=''64''';

я заметил что если в строке фильтра появляется два или более "or" то все работает пока не появляется один "and".

фильтр
dm.ADOTable.Filter:='Статус=''На ЦОФ'' and Позиция=''64''';
работает нормально.

Помогите исправить строку фильтра!
Yuran вне форума Ответить с цитированием
Старый 19.05.2010, 09:07   #2
S@fer
Форумчанин
 
Аватар для S@fer
 
Регистрация: 29.01.2009
Сообщений: 411
По умолчанию

Попробуй так
Код:
dm.ADOTable.Filter:='((Статус=''На ЦОФ'') or (Статус=''Своими силами'')) and (Позиция=''64'')';
S@fer вне форума Ответить с цитированием
Старый 19.05.2010, 20:50   #3
Yuran
Форумчанин
 
Регистрация: 18.02.2008
Сообщений: 198
По умолчанию

Спасибо з асовет! Но так тоже не работает.
Я разобрался как нужно составлять фильтр!

на пример условие (1 or 2 or 3 or 4) and 5 нужно записывать так:

(1 and 5) or (2 and 5) or (3 and 5) or (4 and 5) - РАБОТАЕТ ТОЛЬКО ЭТОТ ВАРИАНТ:

Проклятый майкрософт извратился или недоделал или не захотел доделывать нормальную обработку логических условий.
Возможно кому-то пригодится.

Теперь вопрос в другом: как "собрать" такую строку???
У меня на форме 6 чекбоксов от 1 до 6
1-й чекбокс назначает переменной а1 значение 'Статус=''На ЦОФ''';
2-й а2:='Статус=''Возвращен''';
3-й a3:='Статус=''В ремонте''';
4-й a4:='Статус=''Своими силами''';
5-й a5:='Позиция='64''';
6-й a6:='Дата>''01.05.2010'' and дата<''10.05.2010''';

Если выбраны все чекбоксы фильтр должен иметь вид:
(a1 and a5 and a6) or (a2 and a5 and a6) or (a3 and a5 and a6) or (a4 and a5 and a6)

А если , скажем, 2-й и 5-й не выбраны - то
(a1 and a6) or (a3 and a6) or (a4 and a6);

Как это сделать?

Последний раз редактировалось Yuran; 19.05.2010 в 20:56.
Yuran вне форума Ответить с цитированием
Старый 21.05.2010, 09:26   #4
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

А что тут помогать?

Код:
   SF := '';
   if CheckBox1.Checked then begin
     SF := '( Статус= '+ QuotedStr('На ЦОФ')+' )';
   end;
   if CheckBox2.Checked then begin
     if Length(SF)>0 then SF := SF + ' or ';
     SF := '( Статус= '+ QuotedStr('Возвращен')+' )';
   end;

   if CheckBox3.Checked then begin
     if Length(SF)>0 then SF := SF + ' or ';
     SF := '( Статус= '+ QuotedStr('В ремонте')+' )';
   end;
....

   if CheckBox5.Checked then begin
     if Length(SF)>0 then SF := SF + ' or ';
     SF := '( Позиция = '+ QuotedStr('64')+' )';
   end;

   if CheckBox6.Checked then begin
      if Length(SF)>0 then SF := SF + ' or ';
       // как записываются константы даты в фильтре -
       // выясняйте и проверяйте самостоятельно...
       .....
    end;

  ADOTable.Filter := SF;
  ADOTable.Filtered := True;
p.s. крайне рекомендую Вам воспользоваться SQL (формировать подобную строчку запроса) и получать выборку через ADOQuery
Serge_Bliznykov вне форума Ответить с цитированием
Старый 21.05.2010, 23:38   #5
Yuran
Форумчанин
 
Регистрация: 18.02.2008
Сообщений: 198
По умолчанию

Из моего предыдущего поста - этот фильтр не работает.

Ладно всем спасибо.
Тему можно закрывать.
А я буду учить SQL
Yuran вне форума Ответить с цитированием
Старый 22.05.2010, 01:20   #6
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Из моего предыдущего поста - этот фильтр не работает.
Это Вы о чём?!!

в результате подобного кода формируется фильтр вида
'(Условие 1) or (Условие 2) or ... ;

Как это - "он не работает"?!!!


Цитата:
А я буду учить SQL
Это похвально. Учите....
Serge_Bliznykov вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Фильтр по lookup в ADOTable cyphers1313 БД в Delphi 16 21.04.2010 17:43
Фильтр по lookup в ADOTable cyphers1313 Общие вопросы C/C++ 0 21.04.2010 10:48
не работает фильтр Rin БД в Delphi 7 23.12.2009 10:59
Не работает AdoTable.LoadFromFile SERG1980 БД в Delphi 0 30.03.2009 16:42