Фильтрация по дате в DBGrid
(1/3) > >>
dines:
BDE, Table, DataSource, DBGrid. База данных Paradox7.
В БД первое поле с датой в формате дд.мм.гггг
Нужна фильтрация по дате, выбранной в MonthCalendar. А точнее фильтрация нужна по месяцу и году (месячные отчёты).
Но сравнивать получается только даты формата дд.мм.гггг (т.к. именно в таком формате находятся даты в базе данных), и никак не получается сравнить дд.мм.гггг с мм.гггг. Оно наверное и логично, ведь сравнивать нужно в одном формате.
Сейчас думаю делать так:
1. В обработчике события OnClick календаря, получаем выбранную дату (MonthCalendar->Date) и преобразованием получаем из неё месяц и год (уже в виде AnsiString).
2.Прилепляем к строке с месяцем и годом первое и последнее число месяца, и полученные строки преобразовываем обратно в DateTame, что бы можно было сравнить их с датой из базы данных. Типа, пропускаем всё что больше или равно первого числа выбранного месяца и года и меньше или равно последнего числа этого же месяца и года.
Но, блин, в месяце может быть 30, 31 или 28 дней (ну ладно, это поправимо, if-ами условия задать), так ещё и года бывают високосные, где в феврале 29 дней. Так что вручную получить кол-во дней в выбранном месяце получается очень грамоздко.
Два вопроса:
1. Как проще получить из MonthCalendar кол-во дней в выбранном месяце?
2. Может я вообще сильно усложняю, и отфильтровать по дате (месяцу и году) можно гораздо проще?
п.с.
Фильтрация нужна именно средставми Table.
L0rd:
http://www.scribd.com/doc/51419806/SQL-sbornik-receptov#outer_page_233
прочти, может подойдет?
dines:
К сожалению по ссылке пустые страницы (а может и браузер глючит..)
В общем, не дожидаясь ответа решил ввести новое поле формата LongInteger в базу данных и при добавлении новых записей, вместе с обычной датой в новое поле будет записоваться видоизменённая дата как целое число ггггмм специально что бы фильтровать потом по этому полю.
Теперь задолбался с синтаксисом в Filter в Table. А именно пишу:
Код:
int dat=201106;
Table1->Filter=" DatForFilt = 'dat' ";
а в ответ выдаёт ошибку. Вот если вместо dat напрямую вписать 201106, то всё работает, а если сначала нужной переменной присвоить значение 201106, то вот переменную уже не воспринимает фильтр. Мож фильтре таблицы для переменных синтаксис другой?
работает только вот так:
Код:
Table1->Filter=" DatForFilt = '201106' ";
L0rd:
Извлечение единиц времени из даты
Задача
Требуется разложить текущую дату на шесть частей: день, месяц, год,секунды, минуты и часы. Результаты должны быть возвращены в численном виде.
Решение
В данном рецепте текущая дата выбрана для иллюстрации, он свободно может использоваться с другими датами. В главе1 говорилось о важности изучения и использования преимуществ встроенных функций, предоставляемых СУБД. Это особенно актуально, когда дело касается дат. Существует множество других способов извлечения единиц времени из даты, кроме представленных в данном рецепте. Очень полезно поэкспериментировать с разными техниками и функциями.
DB2
DB2 реализует ряд встроенных функций, которые упрощают задачу по извлечению частей даты. Имена функций HOUR (час), MINUTE (минута), SECOND (секунда), DAY, MONTH и YEAR соответствуют возвращаемым ими единицам измерения времени. Если требуется получить день, используется функция DAY, час – функция HOUR и т.д.Например:
1 select hour( current_timestamp ) hr,2 minute( current_timestamp ) min,3 second( current_timestamp ) sec,4 day( current_timestamp ) dy,5 month( current_timestamp ) mth,6 year( current_timestamp ) yr7 from t1
HR MIN SEC DY MTH YR
20 28 36 15 6 2005
как по мне - то нужно с помощью СКЛ сделать запрос к нужной таблице в котором дату разбить на составляющие дд мм гггг и фильтровать по ним ;), в грид их выводить не обязательно, главное, что бы они были в датасет
L0rd:
Цитата: dines от 05 Июль 2011, 12:38:40
Код:
[font=Verdana]int dat=201106;[/font]
Table1->Filter=" DatForFilt = 'dat' ";
а в ответ выдаёт ошибку.
работает только вот так:
Код:
Table1->Filter=" DatForFilt = '201106' ";
Правельно - ты в фильтр подставляешь int, тогда приводи IntToStr(dat)
Навигация
[0] Главная страница сообщений
[#] Следующая страница