![]() |
Прежде чем задать вопрос, смотрите FAQ.
Рекомендуем загрузить DRKB.
![]() ![]() |
![]() |
мисс_граффити |
![]()
Сообщение
#1
|
![]() просто человек ![]() ![]() ![]() ![]() ![]() ![]() Группа: Модераторы Сообщений: 3 641 Пол: Женский Реальное имя: Юлия Репутация: ![]() ![]() ![]() |
Здравствуйте.
Ситуация: есть база данных людей. Одно из полей - дата рождения. TDate. Задача: надо выбрать тех, у кого сегодня день рождения (а еще лучше - тех, у кого день рождения попал в интервал +-3 дня от сегодняшней даты). Проблема: грубо говоря, дата хранится в виде "сколько дней прошло от 30 декабря 1899". то есть найти тех, кто родился _сегодня_ - не проблема. А тех, кто родился в этот день n лет назад - не знаю как ![]() Можно, конечно, сделать перебор по годам... но что-то меня такой вариант не радует. Подскажете что-нибудь? --- Нашла DecodeDate Уже лучше, но не идеальный вариант (воспользоваться фильтром не получится). Так что вопрос актуален. Сообщение отредактировано: мисс_граффити - 12.09.2007 23:51 -------------------- Все содержимое данного сообщения (кроме цитат) является моим личным скромным мнением и на статус истины в высшей инстанции не претендует.
На вопросы по программированию, физике, математике и т.д. в аське и личке не отвечаю. Даже "один-единственный раз" в виде исключения! |
volvo |
![]()
Сообщение
#2
|
Гость ![]() |
if Abs(DaysBetween(IncYear(Today(), - { число лет назад }), { очередная дата })) <= 3 then ...? |
мисс_граффити |
![]()
Сообщение
#3
|
![]() просто человек ![]() ![]() ![]() ![]() ![]() ![]() Группа: Модераторы Сообщений: 3 641 Пол: Женский Реальное имя: Юлия Репутация: ![]() ![]() ![]() |
Опять же - полный перебор
1) по записям 2) по годам ![]() А так хотелось бы просто написать Filter:='DateOfBirth.Day="+IntToStr(Now.Day) и пусть оно там само фильтруется как хочет. Сообщение отредактировано: мисс_граффити - 13.09.2007 0:04 -------------------- Все содержимое данного сообщения (кроме цитат) является моим личным скромным мнением и на статус истины в высшей инстанции не претендует.
На вопросы по программированию, физике, математике и т.д. в аське и личке не отвечаю. Даже "один-единственный раз" в виде исключения! |
volvo |
![]()
Сообщение
#4
|
Гость ![]() |
Можно пойти гораздо более простым путем:
if DayOfTheYear({дата}) = DayOfTheYear(Today()) then ..., но будет проблема с високосными годами... Хотя и это решаемо... |
мисс_граффити |
![]()
Сообщение
#5
|
![]() просто человек ![]() ![]() ![]() ![]() ![]() ![]() Группа: Модераторы Сообщений: 3 641 Пол: Женский Реальное имя: Юлия Репутация: ![]() ![]() ![]() |
Это, похоже, то что нужно.
Спасибо большое! а с високосными... там получается с марта (точнее, как раз с 29 февраля) "сползание" номера на 1... будет дополнительное условие... -------------------- Все содержимое данного сообщения (кроме цитат) является моим личным скромным мнением и на статус истины в высшей инстанции не претендует.
На вопросы по программированию, физике, математике и т.д. в аське и личке не отвечаю. Даже "один-единственный раз" в виде исключения! |
klem4 |
![]()
Сообщение
#6
|
![]() Perl. Just code it! ![]() ![]() ![]() ![]() ![]() ![]() Группа: Модераторы Сообщений: 4 100 Пол: Мужской Реальное имя: Андрей Репутация: ![]() ![]() ![]() |
Цитата Нашла DecodeDate Уже лучше, но не идеальный вариант (воспользоваться фильтром не получится) Почему не получится ? А если обрабатывать в OnFilterRecord ? Так можно писать выражения для отбора любой сложности ... В обработчике проверять:
+можно без onFilterRecord, юзать SetRange например. -------------------- perl -e 'print for (map{chr(hex)}("4861707079204E6577205965617221"=~/(.{2})/g)), "\n";'
|
мисс_граффити |
![]()
Сообщение
#7
|
![]() просто человек ![]() ![]() ![]() ![]() ![]() ![]() Группа: Модераторы Сообщений: 3 641 Пол: Женский Реальное имя: Юлия Репутация: ![]() ![]() ![]() |
я так пока просто не умею
![]() буду пробовать. как применить SetRange - не придумала. В этом-то и проблема. Если бы нужны были люди, родившиеся, например, с 1.09.1988 по 10.09.1988 - без проблем. А как задать, что интересует ЛЮБОЙ год?... -------------------- Все содержимое данного сообщения (кроме цитат) является моим личным скромным мнением и на статус истины в высшей инстанции не претендует.
На вопросы по программированию, физике, математике и т.д. в аське и личке не отвечаю. Даже "один-единственный раз" в виде исключения! |
volvo |
![]()
Сообщение
#8
|
Гость ![]() |
Юля, еще один вариант - использовать SQL-Query... Только что создал маленькую табличку в Access-е, заполнил ее поле DateOfBirth разными датами, и связал TADOQuery с TDBGrid-ом... А заполняется Query вот так:
procedure TForm1.Button1Click(Sender: TObject);(в Edit1 - задаваемый тобой интервал, количество дней +/- от сегодняшнего числа)... |
![]() ![]() |
![]() |
Текстовая версия | 20.06.2025 5:30 |