Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 31.10.2011, 13:31   #1
city32
Пользователь
 
Регистрация: 14.10.2011
Сообщений: 48
По умолчанию Выбор людей из базы в ходящих в определенный возрастной диапазон

Ситуация следующая. Есть База данных с датой рождения. Можно ли создать запрос чтобы исходя из даты рождения выводились люди входящие в диапазон 1 запрос:до 30 лет
2 запрос :от 31 до 35.
Таблица аксесс, данные через ADO.
city32 вне форума Ответить с цитированием
Старый 31.10.2011, 14:18   #2
_SERGEYX_
Участник клуба
 
Аватар для _SERGEYX_
 
Регистрация: 07.07.2007
Сообщений: 1,518
По умолчанию

Код:
  var FDateBegin, FDateEnd: TDateTime;
..........................
{от сейчас минусуем 30 лет умноженное на 365 дней..
високосные годы тоже можно посчитать, если не лень}

FDateBegin:= now - 30 * 365;
FDateEnd:= now;

with Query do
  begin
  Close;
  SQL.Text := 'SELECT * FROM your_table ' +
                        'WHERE date BETWEEN :date_begin AND :date_end;';
  ParamByName('date_begin').AsDateTime := FDateBegin;
  ParamByName('date_end').AsDateTime := FDateEnd;
  Open;
  end;
Запрос не проверял... пишу без delphi.
Для второго запроса, наверно так

Код:
FDateBegin:= now - 35 * 365;
FDateEnd:= now - 31 * 365;
Может и проще можно, хз, надо подумать...
_SERGEYX_ вне форума Ответить с цитированием
Старый 31.10.2011, 14:23   #3
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Вместо
Код:
FDateBegin:= now - 30 * 365;
чтобы не было запарки с високосными годами удобней
Код:
FDateBegin:=IncMonth(now,-30*12);
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 31.10.2011, 14:55   #4
city32
Пользователь
 
Регистрация: 14.10.2011
Сообщений: 48
По умолчанию

Ругается на ParamByName
city32 вне форума Ответить с цитированием
Старый 31.10.2011, 17:21   #5
Surgeon
Форумчанин
 
Регистрация: 04.10.2007
Сообщений: 106
По умолчанию

Наверно
Код:
YourQuery.Parameters.ParamByName....
надо
Все не так плохо, как вам кажется, на самом деле все гораздо хуже.
http://delphiworld.narod.ru/dw.html - 5000 статей!!! удобный поиск, оффлайн сборник, рекомендую всем
Surgeon вне форума Ответить с цитированием
Старый 31.10.2011, 17:40   #6
city32
Пользователь
 
Регистрация: 14.10.2011
Сообщений: 48
По умолчанию

Теперь ругается на AsDateTime
city32 вне форума Ответить с цитированием
Старый 01.11.2011, 05:39   #7
Surgeon
Форумчанин
 
Регистрация: 04.10.2007
Сообщений: 106
По умолчанию

Можно попробовать:
Код:
YourQuery.Parameters.ParamByName('MYPARAMETER').Value:=....
Крайне рекомендую жать F1, там есть не только объяснялка, но и примеры использования бывают.
Все не так плохо, как вам кажется, на самом деле все гораздо хуже.
http://delphiworld.narod.ru/dw.html - 5000 статей!!! удобный поиск, оффлайн сборник, рекомендую всем
Surgeon вне форума Ответить с цитированием
Старый 01.11.2011, 10:06   #8
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

1) если уж использовать такой подход, тогда я безоговорочно за вариант получения начальной даты (c) Аватар
Цитата:
Код:
FDateBegin:=IncMonth(now,-30*12);
2) можно и вообще без параметров обойтись для решения задачи.

посмотрите вот в этой теме: Подсчет возраста

там вариант примерно такого запроса:
Цитата:
Код:

select ageTT.* from
(SELECT *, 
IIf(DateSerial(Year(Now()), Month([DD]), Day([DD])) - Date() > 0,
Year(Now())-Year([DD])-1, Year(Now())-Year([DD]) ) as FullAge FROM table3) ageTT
where AgeTT.FullAge between 17 and 25;
-- DD замените на имя поля, где забита дата рождения
-- Table3 замените на имя Вашей таблицы
Вам остаётся только вставить имена своей таблицы и поля с датой рождения,
указать какой должен быть полный возраст в годах (например,
Код:
where AgeTT.FullAge <= 30
) и всё!
Serge_Bliznykov вне форума Ответить с цитированием
Старый 01.11.2011, 12:49   #9
city32
Пользователь
 
Регистрация: 14.10.2011
Сообщений: 48
По умолчанию

Спасибо огромное за помощь, работает.
И вдогонку вопросик: можно ли сделать запрос такого характера:
из таблицы 1 выбрать всех кто (должность =врач) и (учет =специальный учет) и кроме тех кто (звание не равно лейтенант)
city32 вне форума Ответить с цитированием
Старый 01.11.2011, 13:21   #10
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Код:
select * from Таблица1
 where doljnost = 'врач'
   and uchet = 'специальный учет'
   and zvanie<>'лейтенант'
Serge_Bliznykov вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Delphi 7 выбор организации базы данных Streamline БД в Delphi 3 16.08.2010 14:39
Выбор из базы данных значения и присвоение его переменной. vandal123 БД в Delphi 1 20.05.2010 08:15
Выбор базы данных FoxBrut БД в Delphi 2 02.03.2010 12:37
Выбор строки из базы SQL A-1_S БД в Delphi 3 05.09.2009 21:14