|
Вопрос # 3 885/ вопрос открыт / |
|
Необходимо выполнить запрос на определение, кому из физических лиц исполнилось на определенный момент времени 60 лет.
Запрос прописала в свойстве SQL компонента ADOQuery:
SELECT F.SNILS AS \'СНИЛС\', F.Familia \'Фамилия\', F.Name AS \'Имя\', F.Otchestvo AS \'Отчество\', P.Nazvanie AS \'Название организации\'
FROM Fizicheskoe_lico F, Platelshiki P, Rabota R
WHERE F.SNILS = R.SNILS AND P.INN = R.INN AND (:p-F.Data_rojdenia =60 AND F.Pol = \'М\')
В кнопке прописала:
procedure TOcenkaPrav.Button1Click(Sender: TObject);
begin
ADOQuery1.Close;
ADOQuery1.Parameters[0].Value:=Edit1.Text;
ADOQuery1.Open;
end;
:p - параметр, который является датой (в свойствах parameters он не определяется как date, только как datetime), возможно в этом проблема? Посоветуйте пожалуйста, что можно сделать
 |
Вопрос задала: Margarett (статус: Посетитель)
Вопрос отправлен: 14 марта 2010, 13:44
Состояние вопроса: открыт, ответов: 1.
|
Ответ #1. Отвечает эксперт: Вадим К
Здравствуйте, Margarett!
Ну раз там сказано "Дата рождения", а не возраст, то надо как раз и проверять дату рождения. А то так вы ищите тех, кто родился в 60 году 1 января (не в 1960, а именно почти 2000 лет назад!!! - а такие врядли есть:))) ). Но есть ещё момент - дата то скорее всего записывается в виде год-месяц-число, а нам нужно только целое кол-во лет...
Но есть специальные функции. и кусок sql запроса, который у Вас выглядит так
WHERE F.SNILS = R.SNILS AND P.INN = R.INN AND (:p-F.Data_rojdenia =60 AND F.Pol = \'М\')
должен выглядеть где то так
WHERE F.SNILS = R.SNILS AND P.INN = R.INN AND DATEDIFF(yy,GETDATE(),F.Data_rojdenia) =60 AND F.Pol = \'М\')
и если правильно понял, то параметр p уже не нужен...
 |
Ответ отправил: Вадим К (статус: Академик)
Время отправки: 14 марта 2010, 17:35
|
Мини-форум вопроса
Всего сообщений: 3; последнее сообщение — 15 марта 2010, 00:03; участников в обсуждении: 2.
|
Margarett (статус: Посетитель), 14 марта 2010, 18:00 [#1]:
Спасибо большое, что сказали насчет функции DATEDIFF, я про нее не знала.
Насчет параметра. Дело в том, что мне необходимо выяснить, кто стал пенсионерами (кому исполнилось 60) в конкретный день (а не только сегодня, ведь getdate определяет только текущую дату). Подразумевалось, что я введу в поле Edit1 дату (например,день, который был неделю назад), а мне запрос выдаст, кто стал пенсионером в этот день.
Такое возможно реализовать?
Спасибо большое, что откликнулись)
|
|
Вадим К (статус: Академик), 14 марта 2010, 23:54 [#2]:
а кто мешает? просто передать параметр.
Во вторых, я рекомендую использовать не Edit, DateTimePicker согласитесь, дату удобнее выбрать с календарика.
Справитесь или нет?
Галочка "подтверждения прочтения" - вселенское зло.
|
|
Margarett (статус: Посетитель), 15 марта 2010, 00:03 [#3]:
Ваш итоговый вопрос меня спас, поскольку это второй косяк, с которым пытаюсь справиться. Не могу никак создать ни считывание дат с календаря, ни выпадающие списки в таблицах (это для вставки данных). Если у Вас есть время и желание, то буду очень признательна, если вы объясните это подробнее.
|
Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.
|