Topic: Телефонная книга: Напоминание о дне рождения абонента

В таблице abonents есть поле birthday. Как для процедуры Form1_OnShow написать скрипт на открытие ShowMessage('Сегодня день рождения: ФИО' )?

Не боги горшки лепят!

Re: Телефонная книга: Напоминание о дне рождения абонента

Попробуйте так

procedure Form1_OnShow (Sender: string; Action: string);
var
    s: string;
begin
    s := SQLExecute('SELECT group_concat(lastname || '' '' || firstname, char(13)) FROM person WHERE date(birthday)=date(''now'')');
    if s <>'' then
    begin
        ShowMessage( 'Сегодня день рождения:' + #13 +s );
    end;
end;

выведет список имен и фамилий.

Dmitry.

3 (edited by kunar80 2015-06-18 07:21:56)

Re: Телефонная книга: Напоминание о дне рождения абонента

Работает в том случае, если дата рождения равна сегодняшней. Но ведь сравнивать нужно только день и месяц, игнорируя год...

Post's attachments

Attachment icon phone.rar 7.07 kb, 473 downloads since 2015-06-18 

Не боги горшки лепят!

Re: Телефонная книга: Напоминание о дне рождения абонента

Точно, ошибся, попробуйте так

procedure Form1_OnShow (Sender: string; Action: string);
var
    s: string;
begin
    s := SQLExecute('SELECT group_concat(lastname || '' '' || firstname, char(13)) FROM person WHERE strftime('%d.%m', birthday)=strftime('%d.%m', ''now'')');
    if s <>'' then
    begin
        ShowMessage( 'Сегодня день рождения:' + #13 +s );
    end;
end;
Dmitry.

5 (edited by kunar80 2015-06-18 11:47:29)

Re: Телефонная книга: Напоминание о дне рождения абонента

DriveSoft wrote:

Точно, ошибся, попробуйте так

Ругается на скобку

strftime('%d.%m'
Post's attachments

Attachment icon Employees TableGrid and memo.rar 4.73 kb, 494 downloads since 2015-06-18 

Не боги горшки лепят!

Re: Телефонная книга: Напоминание о дне рождения абонента

Забыл экранировать кавычки, исправленный вариант

procedure Form1_OnShow (Sender: string; Action: string);
var
    s: string;
begin
    s := SQLExecute('SELECT group_concat(lastname || '' '' || firstname, char(13)) FROM person WHERE strftime(''%d.%m'', birthday)=strftime(''%d.%m'', ''now'')');
    if s <>'' then
    begin
        ShowMessage( 'Сегодня день рождения:' + #13 +s );            
    end;
end;
Dmitry.

7 (edited by kunar80 2015-06-18 18:55:11)

Re: Телефонная книга: Напоминание о дне рождения абонента

Спасибо. Работает. Как раз только что до этого сам дошёл. Вот теперь появился смысл в наличии даты рождения.

Post's attachments

Attachment icon phone.rar 10.26 kb, 545 downloads since 2015-06-18 

Не боги горшки лепят!

8 (edited by kunar80 2015-07-05 20:24:38)

Re: Телефонная книга: Напоминание о дне рождения абонента

В продолжение темы.

1. Как аналогично запросить список ЗАВТРАШНИХ именинников?
Меняю now на tomorrow, не работает.

t := SQLExecute('SELECT group_concat(person, char(13)) FROM abonents WHERE strftime(''%d.%m'', birthday)=strftime(''%d.%m'', ''tomorrow'')');

2. А можно ли в гриде поиском или запросом отобрать именинников по определённой дате независимо от года рождения?

Не боги горшки лепят!

Re: Телефонная книга: Напоминание о дне рождения абонента

kunar80

1.

t := SQLExecute('SELECT group_concat(person, char(13)) FROM abonents WHERE strftime(''%d.%m'', birthday)=strftime(''%d.%m'', ''now'', ''+1 day'')');

2.

SELECT person.name FROM abonents WHERE strftime('%d.%m', birthday)=strftime('%d.%m', {DateTimePicker})
Dmitry.