Фильтрация по дате в 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] Главная страница сообщений

[#] Следующая страница