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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 19.08.2011, 13:13   #1
mental
Пользователь
 
Регистрация: 07.01.2009
Сообщений: 36
По умолчанию Фильтр

Нужно сделать фильтр по нескольким критериям (данные берутся из Edit'ов, ComboBox'ов, DateEdit'ов). Фильтрация должна отображаться в DBGrid. Пробовал делать запрос с условиями, но всё криво получается, как грамотно такое можно реализовать? Может я не знаю и у ДБГрида есть свойство фильтр или может есть какой компонент где это легко реализуется?
mental вне форума Ответить с цитированием
Старый 19.08.2011, 19:18   #2
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Самый грамотный способ - запрос сформированный с грамотным условием с использованием TQuery
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 19.08.2011, 20:45   #3
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Может я не знаю и у ДБГрида есть свойство фильтр
Да есть "в принципе на него мона выйти":
Код:
DBGrid1.DataSource.DataSet.Filter:='Поле=значение and второеполе=другоезначение';
Это если проектик простецкий и данных в БД не много, иначе Аватар прав.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 22.08.2011, 14:21   #4
mental
Пользователь
 
Регистрация: 07.01.2009
Сообщений: 36
По умолчанию

Код:
with Form1.ADOQuery4 do
begin
   Filtered:=True;
   If Length(Edit7.Text)>0 then
   filt2:=' and Подразделение='+QuotedStr(Edit7.Text);

   If Length(cxLookupComboBox1.Text)>0 then
   Filt3:=' and ФИО='+QuotedStr(cxLookupComboBox1.Text);

   If Length(ComboBox1.Text)>0 then
   Filt4:=' and [Статус подписания]='+QuotedStr(ComboBox1.Text);

   If Length(cxLookupComboBox2.Text)>0 then
   Filt5:=' and Number='+QuotedStr(cxLookupComboBox2.Text);

   If (Length(cxDateEdit1.Text)>0) and (Length(cxDateEdit1.Text)>0) then
   Filt6:=' and [Дата подачи] Between '+QuotedStr(cxDateEdit1.Text)+' and '+QuotedStr(cxDateEdit2.Text);

    If (Length(cxDateEdit3.Text)>0) and (Length(cxDateEdit4.Text)>0) then
    Filt7:=' and [Дата подписания] Between '+QuotedStr(cxDateEdit3.Text)+' and '+QuotedStr(cxDateEdit4.Text);


   Edit10.Text:='ФИО<>'+#39+'dsa'+#39+Filt2+Filt3+Filt4+Filt5+Filt6+Filt7;
   Filter:=Edit10.Text;
  end;
Собственно всё проходит кроме дат, вроде бы по коду всё правильно, но выдаёт ошибку: аргументы имеют неверный тип, выходят за пределы допустимого диапазона или вступают в конфликт с друг другом.
Запрос который присваивается к Filtered:
Код:
ФИО<>'dsa' and [Статус подписания]='Подписано' and [Дата подписания] Between '15.08.2011' and '28.08.2011'
Помогите разобраться.
mental вне форума Ответить с цитированием
Старый 22.08.2011, 16:15   #5
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Код:
ФИО<>'dsa' and [Статус подписания]='Подписано' and [Дата подписания] Between '2011-08-15' and '2011-08-28'
или
Код:
ФИО<>'dsa' and [Статус подписания]='Подписано' and day([Дата подписания]) Between 15 and 28
Это если такая функция есть в СУБД.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Фильтр Magicmax Microsoft Office Excel 11 22.06.2010 12:20
Фильтр leno4ka_09 Microsoft Office Excel 2 13.05.2010 14:39
Фильтр БД Ma4balaka БД в Delphi 3 12.05.2010 12:15
Фильтр Машенька Microsoft Office Access 1 16.12.2009 20:27