Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Базы данных и репортинг > Вопрос по запросу (MS Access/ADO)


Автор: AntonStr 5.6.2008, 05:09
Добрый. У меня программа по автоматизации учета кадров (MS Access/ADO). Нужно создать запрос на вывод всех сотрудников у которых, например в ближайшую неделю, будет день рождения. Как сделать? Пожалуйста, примером кода бы..
И еще вопрос: можно ли и как сделать напоминание (допустим за день) о дне рождения сотрудника? Буду оч благодарен за помощь хотя бы с первым вопросом. 

Автор: Zmitro 5.6.2008, 08:23
по первому вопросу:
Код

ADOQuery1.Close;
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Add('SELECT DogNumb, DogDate FROM DD WHERE (DogDate Between :start And :end);');
ADOQuery1.Parameters.ParamByName('start').Value := DateToStr(Date);
ADOQuery1.Parameters.ParamByName('end').Value := DateToStr(Date+7);
ADOQuery1.Open;

только поля поставь свои

по второму - измени даты в запросе и делай напоминалку.

Автор: Savek 5.6.2008, 09:02
Цитата(Zmitro @  5.6.2008,  08:23 Найти цитируемый пост)
.Value := DateToStr(Date);

Зачем так измываться над датой?

Автор: Zmitro 5.6.2008, 18:09
Цитата(Savek @ 5.6.2008,  09:02)
Цитата(Zmitro @  5.6.2008,  08:23 Найти цитируемый пост)
.Value := DateToStr(Date);

Зачем так измываться над датой?

где-то была готовая база и пришлось подстраиваться под нее  :(

Автор: AntonStr 5.6.2008, 18:41
Цитата(Zmitro @ 5.6.2008,  08:23)
по первому вопросу:
Код

ADOQuery1.Close;
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Add('SELECT DogNumb, DogDate FROM DD WHERE (DogDate Between :start And :end);');
ADOQuery1.Parameters.ParamByName('start').Value := DateToStr(Date);
ADOQuery1.Parameters.ParamByName('end').Value := DateToStr(Date+7);
ADOQuery1.Open;

только поля поставь свои

по второму - измени даты в запросе и делай напоминалку.

Спасибо, с первым вопросом разобрался. 
А можно поподробнее с напоминалкой? Как ее на таймер повесить? Чтобы выплывало напоминание за 48 часов, например, до дня рождения.

Автор: Данкинг 5.6.2008, 20:12
Цитата(AntonStr @  5.6.2008,  19:41 Найти цитируемый пост)
Как ее на таймер повесить? 

Задать интервал таймеру 1000, чтобы проверял каждую секунду. smile Плюс запускать процедуру проверки при запуске самой программы.

Автор: AntonStr 5.6.2008, 20:54
Цитата(Данкинг @ 5.6.2008,  20:12)
Цитата(AntonStr @  5.6.2008,  19:41 Найти цитируемый пост)
Как ее на таймер повесить? 

Задать интервал таймеру 1000, чтобы проверял каждую секунду. smile Плюс запускать процедуру проверки при запуске самой программы.

Приведите, пожалуйста, пример с кодом

Автор: Данкинг 5.6.2008, 21:02
Цитата(AntonStr @  5.6.2008,  21:54 Найти цитируемый пост)
Приведите, пожалуйста, пример с кодом 

Я алгоритм могу привести: запросом выбираешь данные из БД, в которых разница с текущей датой равна двум суткам. Ну и выводишь строки туда, куда тебе нужно, при наличии таковых.

Автор: AntonStr 6.6.2008, 01:32
Цитата(Zmitro @ 5.6.2008,  08:23)
по первому вопросу:
Код

ADOQuery1.Close;
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Add('SELECT DogNumb, DogDate FROM DD WHERE (DogDate Between :start And :end);');
ADOQuery1.Parameters.ParamByName('start').Value := DateToStr(Date);
ADOQuery1.Parameters.ParamByName('end').Value := DateToStr(Date+7);
ADOQuery1.Open;

только поля поставь свои

по второму - измени даты в запросе и делай напоминалку.

Вопрос: этот запрос работает только для текущего 2008 года. Как сделать для любого года рождения?

Автор: Данкинг 6.6.2008, 01:53
Цитата(AntonStr @  6.6.2008,  02:32 Найти цитируемый пост)
Как сделать для любого года рождения? 

В параметрах вместо DATE (текущая дата) подставлять дату нужную.

Автор: AntonStr 6.6.2008, 07:21
Цитата(Данкинг @ 6.6.2008,  01:53)
Цитата(AntonStr @  6.6.2008,  02:32 Найти цитируемый пост)
Как сделать для любого года рождения? 

В параметрах вместо DATE (текущая дата) подставлять дату нужную.

Подставляю, например, "05.05.1960"  и ошибка - Record, object or class type required

Автор: Savek 6.6.2008, 08:15
Цитата(Данкинг @  6.6.2008,  01:53 Найти цитируемый пост)
В параметрах вместо DATE (текущая дата) подставлять дату нужную.

Как ты себе это представляешь? День рождения есть у каждого хотя бы раз в году, независимо от даты рождения smile 

Автор: Zmitro 6.6.2008, 08:21
только за месяц: WHERE LIKE "??.06.????"

Автор: Atiskara 24.6.2008, 21:26
Кто мне поможет? У меня стоит схожая задача, как у автора данной темы.

Вот код:
Код


    ind:=DataModule6.ADOQuery1.Fields[0].AsInteger;

    DataModule6.ADOQuery2.Close;
    DataModule6.ADOQuery2.SQL.Clear;
    DataModule6.ADOQuery2.SQL.Add('SELECT Patients.LastName, Echo.*, Conditions.Condition ');
    DataModule6.ADOQuery2.SQL.Add('FROM Patients, Echo, Conditions');
    DataModule6.ADOQuery2.SQL.Add('WHERE (Echo.PatientID=Patients.PatientID)  and  (Echo.ConditionID=Conditions.ConditionID) and (Echo.PatienttID=:ind1);');
    DataModule6.ADOQuery2.Parameters.ParamByName('ind1').Value:=integer(ind);
    DataModule6.ADOQuery2.Open;


Что при этом означает ошибка "Отсутствует значение для одного или нескольких требуемых параметров"? И как с ней бороться?

Автор: Atiskara 24.6.2008, 21:59
млина, нашла ошибку... неправильно написала имя поля  smile 

Код

Echo.PatienttID=:ind1

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)