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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 16.06.2009, 01:44   #1
MaGWaY_minsk
Пользователь
 
Регистрация: 17.10.2008
Сообщений: 35
По умолчанию Delphi\MySql\Фильтрация.

Доброго времени суток!
Сегодня столкнулся с такой проблемой - а именно фильтрация данных.
Собственно, опишу всю тему: Приёмная комиссия... Приём документов, вывод списков и т.д.
Моя задача состоит в том, что бы при помощи фильтров в dbGrid'e выводилась информация, которая соответствует данным из фильтров. Один фильтр применить - это не проблема... Допустим, вывести всех абитуриентов, балл которых выше 100...
Но, собственно в чём загвоздка: как, при желании пользователя создать 2 фильтра.
Делал это через if: типа если активировать второй фильтр, ко к результату добавляется ещё один параметрЮ но тогда мне выводит только пустой дбгрид...

Вот часть запроса одиночного(только первого фильтра), подскажите пожалуйста, как добавить в запрос второй критерий фильтрации(например балл выше 100 и специальность xxx).
Заранее спасибо!

Код:
function TForm1.FilterStr: string;  //Процедура считывания данных для фильтрации
begin
  result:='';  //начальное значение
  if length(bsSkinEdit1.Text)<>0 then //если длина текста в bsSkinEdit1 отлична от нуля, то
  begin
    if bsSkinComboBox1.ItemIndex=0 then   //Если выбран первый элемент в bsSkinComboBox то..
      result:='start_date='''+bsSkinEdit1.Text+'*'+'''' //фильтрация будет пременина к полю даты рождения
      else  //иначе
      if bsSkinComboBox1.ItemIndex=1 then //если второй элемент, то
        result:='passport_numb='''+bsSkinEdit1.Text+'*'+''''; //фильтруем по номеру паспорта
  end;
P.S. Как я понимаю, нужно тогда при применении второго фильтра считывать с поля значение и каким-то боком расширить параметры переменной result... Но вот только как?
MaGWaY_minsk вне форума Ответить с цитированием
Старый 17.06.2009, 08:59   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Делал это через if: типа если активировать второй фильтр, ко к результату добавляется ещё один параметрЮ но тогда мне выводит только пустой дбгрид...
Показывай. как делал.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 17.06.2009, 11:01   #3
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

MaGWaY_minsk, могу поделиться подходом, как подобные вещи я делал...
заводим строчку для формирования строки фильтрации.
для каждого условия (фильтра) проверяем, если строка пустая, то добавляем в неё условие фильтрации (в круглых скобках), если строка НЕ пустая, то вначале добавляем ' AND ' (предполагаем, что все условия у Вас связаны логическим И (т.е. имеющих дату рождения И номер паспорта И балл И ....)
приблизительно так:
Код:
  SFilter := '';
  if ВыбранФильтр1 then begin
    if Length(SFilter)>0 then SFilter := SFilter + ' AND ';
    SFilter := SFilter  + '( Поле1 = ' + ЗначениеФильтра1 + ' ) '; 
  end;
  if ВыбранФильтр2 then begin
    if Length(SFilter)>0 then SFilter := SFilter + ' AND ';
    SFilter := SFilter  + '( Поле2 = ' + ЗначениеФильтра2 + ' ) '; 
  end;
p.s. разумеется, строковые значения должны быть в апострофах/кавычках...

Цитата:
Сообщение от Stilet
Показывай. как делал.
это тоже не помешает никогда...
Serge_Bliznykov вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Delphi+MySQL Dul БД в Delphi 2 15.05.2009 15:01
Фильтрация в Delphi с помощью Combobox Веснушка_ната Помощь студентам 4 07.04.2009 02:36
Delphi+MySQL Cabyrc БД в Delphi 2 02.04.2009 09:24
Фильтрация в Delphi Лукманов Александр БД в Delphi 4 16.06.2008 15:30
MySQL+Delphi Toxa Общие вопросы Delphi 3 23.01.2007 18:24