- -
Сравнение дат
(
http://forum.oszone.net/showthread.php?t=212513)
Radik_Assasin |
03-08-2011 12:50 1725143 |
Сравнение дат
Здравствуйте! Хотел написать программу напоминающую о днях рождения. Но не могу нормально придумать то место где программа сравнивала бы дату с базы данных с системной. Вот мои наработки
Код:
procedure TMainForm.FormShow(Sender: TObject);
var
y1,m1,d1,y2,m2,d2:word;
begin
DecodeDate(DataModule3.BookTable.FieldByName('День рождения').AsDateTime,y1,m1,d1);
DecodeDate(Date,y2,m2,d2);
if (m1 = m2) and (d1 = d2) then ShowMessage('Обнаружен день рождения');
end;
Программа скомпилировалась. Попробовал перевести дату и запустить, а она не сработала... То есть не вывела сообщения "Обнаружено день рождение"...
|
Radik_Assasin, А в чем хранятся данные о днях рождений? У меня просто есть мною написанная программа, успешно работающая на моей работе, которая как раз и выводит список сегодняшних дней рождений в трее.
Цитата:
Цитата Radik_Assasin
То есть не вывела сообщения "Обнаружено день рождение"... »
|
Ну наверное для начала надо запустить отладчик и посмотреть, чему равны переменные m1, m2, d1, d2, а потом уже смотреть дальше...
|
А почему не использовать CompareDate? Ведь сравнивать нужно только даты.
|
Radik_Assasin |
04-08-2011 09:12 1725675 |
Я сделал вот так
Код:
procedure TMainForm.FormShow(Sender: TObject);
var
y1,m1,d1,y2,m2,d2:word;
begin
DataModule3.BookTable.First;
DecodeDate(DataModule3.BookTable.FieldByName('День рождения').AsDateTime,y1,m1,d1);
DecodeDate(Now,y2,m2,d2);
Repeat
if (d1 = d2) and (m1 = m2) then ShowMessage('Обнаружен день рождения') else ShowMessage('Ничего не обнаружено');
DataModule3.BookTable.Next;
Until not DataModule3.BookTable.EOF;
end;
Программа сравнивает только первую дату в столбце. И если перевести дату на эту дату то срабатывает. А если на другие то нет. Не пойму в чем проблема....
|
А почему DecodeDate для даты из датамодуля стоит вне цикла repeat..until? Вторая DecodeDate - я ещё понимаю, её достаточно выполнить один раз перед циклом. А дата из датамодуля должна считываться из каждой записи, а не только из первой, как в Вашем коде.
|
можно виндовому планировщику назначить задание,и ничего не писать (он для этого и есть)
|
Время: 17:03.
© OSzone.net 2001-