Войти

Показать полную графическую версию : Сравнение дат


Radik_Assasin
03-08-2011, 12:50
Здравствуйте! Хотел написать программу напоминающую о днях рождения. Но не могу нормально придумать то место где программа сравнивала бы дату с базы данных с системной. Вот мои наработки

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;

Программа скомпилировалась. Попробовал перевести дату и запустить, а она не сработала... То есть не вывела сообщения "Обнаружено день рождение"...

Delirium
03-08-2011, 16:26
Radik_Assasin, А в чем хранятся данные о днях рождений? У меня просто есть мною написанная программа, успешно работающая на моей работе, которая как раз и выводит список сегодняшних дней рождений в трее.

То есть не вывела сообщения "Обнаружено день рождение"... »
Ну наверное для начала надо запустить отладчик и посмотреть, чему равны переменные m1, m2, d1, d2, а потом уже смотреть дальше...

opel431
03-08-2011, 16:59
А почему не использовать CompareDate? Ведь сравнивать нужно только даты.

Radik_Assasin
04-08-2011, 09:12
Я сделал вот так
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;

Программа сравнивает только первую дату в столбце. И если перевести дату на эту дату то срабатывает. А если на другие то нет. Не пойму в чем проблема....

Любезный
05-08-2011, 18:44
А почему DecodeDate для даты из датамодуля стоит вне цикла repeat..until? Вторая DecodeDate - я ещё понимаю, её достаточно выполнить один раз перед циклом. А дата из датамодуля должна считываться из каждой записи, а не только из первой, как в Вашем коде.

pva
21-08-2011, 13:49
можно виндовому планировщику назначить задание,и ничего не писать (он для этого и есть)




© OSzone.net 2001-2012