Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Базы данных и репортинг > фильтрация по дню рождения


Автор: Гость_Johnny M 12.8.2005, 22:13
Привет. Хочу сделать фильтрацию сегодняшних именинников, но данный код не работает. Я уже воспользовался поиском по форуму - именно такой проблемы вроде никто не описывал - а мне нужна фильтрация по сегодняшнему дню и месяцу - без года


Код
procedure TForm3.Button1.Click(Sender: TObject);
var
  Present: TDateTime;
  Year, Month, Day: word;
begin
Present:= Now;
DecodeDate(Present, Year, Month, Day);
Table2.Filter:='Born_date = '+QuotedStr(inttostr(Day)+'.'+inttostr(Month)+'.'+'*');
Table2.Filtered:=true;
end;


Кто нибудь знает, где тут закопали собачку? smile

Автор: Pakshin A. S. 12.8.2005, 22:41
Цитата
Кто нибудь знает, где тут закопали собачку?


http://forum.vingrad.ru/index.php?showforum=88
В специализированном форуме.

А СКУЛ чем не подходит?

Автор: Cashey 13.8.2005, 00:17
Цитата(Pakshin @ 12.8.2005, 22:41)
http://forum.vingrad.ru/index.php?showforum=88
В специализированном форуме.

забавная ссылка smile ты бы еще такой линк дал бы: http://forum.vingrad.ru/index.php?showtopic=61283 smile
Цитата
Table2.Filter:='Born_date = '+QuotedStr(inttostr(Day)+'.'+inttostr(Month)+'.'+'*');

ну звездочек должно быть очевидно 4. Хотя и не уверен, что это поможет

Автор: SergeBS 14.8.2005, 16:57
Цитата
Ну вы, блин, даете!

Всего дел - вычисляемое поле (день + месяц в любом виде, лишь бы не их сумма smile ), а по этому полю - фильтр. Вроде прокатить должно. Попытка наставить звездочек в поле строки года - это просто не то. Совсем. Как дату можно со строкой сравнить без преобразования, а? Это как килограммы с километрами - всегда разные будут.

Автор: Johnny M 14.8.2005, 17:10
Цитата(SergeBS @ 14.8.2005, 16:57)
(день + месяц в любом виде, лишь бы не их сумма  ), а по этому полю - фильтр. Вроде прокатить должно


по моему этот номер не пройдет. там ведь все таки тип Дата - вся закавыка возникает из за формата его представления - особенности написания первых 9 дней месяца и первых 9 месяцев - 01.05 к примеру. И при переводе в другое поле он будет переводиться как тип word или integer - то есть чило без нуля впереди...

Или я не прав? smile

Автор: bursa 15.8.2005, 15:57
Procedure ...OnCalcField...
var s:string;
begin
s:=Query1.FieldByName('DATA').asString;
s:=s[1]+s[2]+s[4]+s[5];
Query1.FieldByName('CalcDATA').asString:=s;
end;

....
Query1.Filter:='CalcData='+.....


Автор: SergeBS 17.8.2005, 15:41
bursa
Блин, разжуй и в рот еще положи smile. Думатель отказал или просто не включен?
CalcDay - вычисляемое поле, DateFld - поле даты рождения, FilterStr - строка фильтра
procedure xxx.yyyy.OnCalcField;
begin
CalcDay := FormatDateTime('ddmm', DateFld);
end;
Где-то еще:
FilterStr := FormatDateTime('ddmm', now);
Куда эту строку впихнуть - тема домашнего задания. smile

Автор: bursa 17.8.2005, 15:52
Цитата(SergeBS @ 17.8.2005, 15:41)
Думатель отказал или просто не включен?

smile
Прошу не вымахиваться.

Автор: SergeBS 17.8.2005, 15:52
Вдогонку: нафиг не надо поле DateFld преобразовывать лишний раз. Т.е. если поле DR в таблице UserNames - Date - дата рождения, то так и пишем:
CalcDay := FormatDateTime('ddmm',UserNames['DR']);
А способ со всякими s[1]... - от лукавого, ибо привязан к формату даты, принятому незнамо кем незнамо где на серваке и в системе. Нехай они сами меж собой и разбираются.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)