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

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

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

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

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

Закрытая тема
Ваша тема закрыта, почему это могло произойти? Возможно,
Нет наработок или кода, если нужно готовое решение - создайте тему в разделе Фриланс и оплатите работу.
Название темы включает слова - "Помогите", "Нужна помощь", "Срочно", "Пожалуйста".
Название темы слишком короткое или не отражает сути вашего вопроса.
Тема исчерпала себя, помните, один вопрос - одна тема
Прочитайте правила и заново правильно создайте тему.
 
Опции темы Поиск в этой теме
Старый 10.11.2010, 18:32   #1
Sfera
 
Регистрация: 06.04.2009
Сообщений: 7
По умолчанию Фильтр по полям

Здравствуйте! помогите разобраться с одним вопросом.
Есть база данных в которой есть 4 поля. Нужно сделать фильтр так, чтоб я не по одному полю фильтровала, а сразу по нескольким полям.
Использую: CheckBox - для кажного поля, Edit и Button.
вот мой текущий код:
Код:
procedure TForm1.Button2Click(Sender: TObject);
begin
if   CheckBox4.Checked then
         begin
           Table1.Filter:='Codecar='+QuotedStr(Edit6.Text);
          end ;
         if   CheckBox5.Checked then
          begin
           Table1.Filter:='Colorcar='+QuotedStr(Edit2.Text);
          end  ;
          if   CheckBox6.Checked then
           begin
           Table1.Filter:='Year='+QuotedStr(Edit7.Text);
             end ;
         if   CheckBox7.Checked then
         begin
         Table1.Filter:='Codeowner='+QuotedStr(Edit5.Text);
         end;
         Table1.Filtered:=true;
end;
Что не правильно в моем коде, и почему он фильтрует только по последнему условию (то есть, ставлю codecar=5 и colorcar=черный, он мне отображает все черные).

Последний раз редактировалось Stilet; 10.11.2010 в 18:46.
Sfera вне форума
Старый 10.11.2010, 18:50   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Подход неправильный.
Код:
procedure TForm1.Button2Click(Sender: TObject);
begin
Table1.Filter:='';
 if   CheckBox4.Checked then begin
    Table1.Filter:=Table1.Filter+' Codecar='+QuotedStr(Edit6.Text);
 end ;
  if   CheckBox5.Checked then
   begin
    if Table1.Filter<>'' then Table1.Filter:=Table1.Filter+' AND ';
    Table1.Filter:=Table1.Filter+' Colorcar='+QuotedStr(Edit2.Text);
   end  ;
          if   CheckBox6.Checked then
           begin
    if Table1.Filter<>'' then Table1.Filter:=Table1.Filter+' AND ';
           Table1.Filter:=Table1.Filter+' Year='+QuotedStr(Edit7.Text);
             end ;
         if   CheckBox7.Checked then
         begin
    if Table1.Filter<>'' then Table1.Filter:=Table1.Filter+' AND ';
         Table1.Filter:=Table1.Filter+' Codeowner='+QuotedStr(Edit5.Text);
         end;
         Table1.Filtered:=true;
end;
I'm learning to live...
Stilet вне форума
Старый 10.11.2010, 19:01   #3
Sfera
 
Регистрация: 06.04.2009
Сообщений: 7
По умолчанию

Чего-то он не работает. я его запускаю, он мне ошибку выдает. только по отдельности он фильтрует.
Sfera вне форума
Старый 10.11.2010, 20:03   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Чего-то он не работает
А почему меня работает?
Цитата:
я его запускаю, он мне ошибку выдает
Не вижу ошибки.
I'm learning to live...
Stilet вне форума
Старый 10.11.2010, 20:12   #5
Dimasw
Пользователь
 
Регистрация: 12.09.2010
Сообщений: 69
По умолчанию

А я бы предложил другой код:

Код:
procedure TForm1.Button2Click(Sender: TObject);
var
a,a1,a2,a3,a4:string;
begin
if checkbox4.Checked then
a1:=' AND CodeCar='+QuotedStr(Edit6.Text) else a1:='';

if checkbox5.Checked then
a2:=' AND ColorCar='+QuotedStr(Edit2.Text) else a2:='';

if checkbox6.Checked then
a3:=' AND Year='+QuotedStr(Edit7.Text) else a3:='';

if checkbox7.Checked then
a4:=' AND Codeowner='+QuotedStr(Edit5.Text) else a4:='';

a:=a1+a2+a3+a4;
if length(a)>0 then a:=copy(a,6,100);

table1.Filter:=a;
table1.Filtered:=true;
end;

end.
Стараюсь избегать вложенных if, чтобы проще читать код
SELECT BEST FROM LIFE
Dimasw вне форума
Старый 11.11.2010, 06:44   #6
Sfera
 
Регистрация: 06.04.2009
Сообщений: 7
Хорошо

Цитата:
Сообщение от Dimasw Посмотреть сообщение
А я бы предложил другой код
О спасибочки большое за помощь, очень благодарна =)

Последний раз редактировалось mihali4; 11.11.2010 в 09:56.
Sfera вне форума
Старый 11.11.2010, 10:06   #7
Grag
А может и не...
Участник клуба
 
Аватар для Grag
 
Регистрация: 27.03.2010
Сообщений: 1,269
По умолчанию

А я бы еще предложил перед установкой фильтра сделать
Table1.Filtered:=false;
а уж потом
Table1.Filter:=.....;
Table1.Filtered:=true;
Перемешивай дело с бездельем и не сойдешь с ума...
Grag вне форума
Закрытая тема


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
ADO recordset фильтр по нескольким полям zmeevolk Microsoft Office Access 0 28.04.2009 16:23
Сортировка по полям связи A_r_r_a_y БД в Delphi 8 25.04.2009 21:11
Отбор по двум полям MPa БД в Delphi 4 06.02.2008 20:14
Уникальность по 3 полям num8er БД в Delphi 3 09.10.2007 09:54