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

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

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 17.02.2014, 11:06   #1
Scorpuha
Форумчанин
 
Регистрация: 10.10.2013
Сообщений: 177
По умолчанию Фильтр несколько дней с интервалом

вот такая задачка: нужно фильтровать данные в таблице, но непросто (по крайней мере для меня).
К примеру сегодня 17.02.14. Нужны выбрать данные за сегодня + данные за 19.02.14 + данные за 21.02.14. Вот. Данные за сегодня нахожу а вот как сделать остальное пока понять не могу
это код фильтрации за сегодня.

Код:
datamodule2.Attestat.Filtered:=false;
datamodule2.Attestat.Filter :='Data_pereatestat='''+DateToSTr(Now)+'''and Tabel='+Form7.Edit1.Text;
datamodule2.Attestat.Filtered:=true;
Scorpuha вне форума Ответить с цитированием
Старый 17.02.2014, 11:07   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Какая СУБД?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 17.02.2014, 11:21   #3
Scorpuha
Форумчанин
 
Регистрация: 10.10.2013
Сообщений: 177
По умолчанию

эээ извиняюсь. Acces
Scorpuha вне форума Ответить с цитированием
Старый 17.02.2014, 12:59   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Хм... Раз это фильтр в Делфи и у тебя канает твой пример то попробуй так:
Код:
datamodule2.Attestat.Filter :='Data_pereatestat='+QuotedStr(DateToSTr(Now))
 +' and Data_pereatestat='+QuotedStr('19.02.14')
 +' and Data_pereatestat='+QuotedStr('21.02.14')
 +' and Tabel='+Form7.Edit1.Text
;
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 17.02.2014, 13:05   #5
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Ну с AND не очень то за разные дни. OR думаю.
Да и лучше сложные фильтры, особенно с датами, перенести в событие датасета OnFilterRecord
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 17.02.2014, 13:52   #6
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Ну с AND не очень то за разные дни.
Упс!!! Суримасен.
Действительно затупил
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 17.02.2014, 15:29   #7
Scorpuha
Форумчанин
 
Регистрация: 10.10.2013
Сообщений: 177
По умолчанию

эээ, немножко неправильно задачу огласил. пример с конкретными датами некорректен. нужен просто фильтр за текущий день и плюс фильтр данных за послезавтра и плюс фильтр данных за послепослезавтра. как то так. т.е. Now, NOW+2 дня, NOW+4 дня.
Scorpuha вне форума Ответить с цитированием
Старый 17.02.2014, 15:44   #8
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Ага! Соодеска...
Значит этот пример не пашет )
Видимо все действительно лучше вынести в OnFilteredRecord, и просто включать фильтрацию без строки фильтра, и пусть это событие проверяет поле с датой.
Код:
procedure TForm1.SQLQuery1FilterRecord(DataSet: TDataSet; var Accept: Boolean);
var dt:TDate;
begin
  dt:=DataSet.FieldByName('Дата').AsDateTime;
  Accept:= (dt=now) or (dt=StrToDate('17.02.2014'));
end;
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 17.02.2014, 15:52   #9
Scorpuha
Форумчанин
 
Регистрация: 10.10.2013
Сообщений: 177
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
Хм... Раз это фильтр в Делфи и у тебя канает твой пример то попробуй так:
Код:
datamodule2.Attestat.Filter :='Data_pereatestat='+QuotedStr(DateToSTr(Now))
 +' and Data_pereatestat='+QuotedStr('19.02.14')
 +' and Data_pereatestat='+QuotedStr('21.02.14')
 +' and Tabel='+Form7.Edit1.Text
;

этот код даже не пробовал, т.к. он фильтрует по фиксированным датам. а нужно NOW, Now+2дня, Now+4дня.
Scorpuha вне форума Ответить с цитированием
Старый 17.02.2014, 15:53   #10
Scorpuha
Форумчанин
 
Регистрация: 10.10.2013
Сообщений: 177
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
Ага! Соодеска...
Значит этот пример не пашет )
Видимо все действительно лучше вынести в OnFilteredRecord, и просто включать фильтрацию без строки фильтра, и пусть это событие проверяет поле с датой.
Код:
procedure TForm1.SQLQuery1FilterRecord(DataSet: TDataSet; var Accept: Boolean);
var dt:TDate;
begin
  dt:=DataSet.FieldByName('Дата').AsDateTime;
  Accept:= (dt=now) or (dt=StrToDate('17.02.2014'));
end;


а этот код походу делает фильтр за текущую дату или за 17.02.2014.
Scorpuha вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Несколько дней уже не могу разобраться с кодом... timedo HTML и CSS 1 25.02.2013 09:49
Долгая загрузка форума последние несколько дней Alar О форуме и сайтах клуба 45 08.12.2012 00:20
запуск каждые несколько дней. DeDoK Общие вопросы Delphi 0 02.02.2010 14:09
E-mail почта не работает несколько дней, а спам приходит Alar Свободное общение 3 29.01.2008 16:54