Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Программирование и базы данных (http://forum.oszone.net/forumdisplay.php?f=21)
-   -   Сравнение дат (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;

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

Delirium 03-08-2011 16:26 1725311

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

Цитата:

Цитата Radik_Assasin
То есть не вывела сообщения "Обнаружено день рождение"... »

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

opel431 03-08-2011 16:59 1725348

А почему не использовать 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;

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

Любезный 05-08-2011 18:44 1726522

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

pva 21-08-2011 13:49 1736347

можно виндовому планировщику назначить задание,и ничего не писать (он для этого и есть)


Время: 17:03.

Время: 17:03.
© OSzone.net 2001-