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

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

Вернуться   Форум программистов > Delphi программирование > БД в Delphi
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 28.01.2012, 20:15   #11
Seva2011
Пользователь
 
Регистрация: 07.12.2011
Сообщений: 31
По умолчанию

а как это сделать? там же нужно от даты приема до настоящей даты подсчитать количество лет и как то сделать сравнение. вот этого не знаю как сделать.
alexiz, мой запрос должен выглядеть так?
'SELECT * FROM Отдел_кадров WHERE :ADATE-Дата_приема>'+strtoint(edit3.text);
Seva2011 вне форума Ответить с цитированием
Старый 28.01.2012, 20:51   #12
KoliyR
Пользователь
 
Регистрация: 01.09.2009
Сообщений: 55
По умолчанию

Посмотри в первом примере реализовано нахождение возраста
Ошибка заключается в том, что нет полной даты ... и соответственно мы можем дать на 1 больше, хотя скоро день рождения - а если он в декабре (то не скоро)

Тут нужно разницу дат найти нужно

Я попозже домой вернусь напишу ..., как я считаю
Обучение, задания по Делфи http://KoliyR.tk
KoliyR вне форума Ответить с цитированием
Старый 28.01.2012, 20:58   #13
KoliyR
Пользователь
 
Регистрация: 01.09.2009
Сообщений: 55
По умолчанию

проще будет по скайпу показать
Как таблицы подключить,
Как фильтрацию по ним делать
Как с запросами работать по другому (хотя они не нужны здесь)
Как calkulate подя делать - вот что тебе сейчас нужно
Обучение, задания по Делфи http://KoliyR.tk
KoliyR вне форума Ответить с цитированием
Старый 28.01.2012, 22:00   #14
Seva2011
Пользователь
 
Регистрация: 07.12.2011
Сообщений: 31
По умолчанию

попробовал сделать так
Код:
ADOQuery2.Active:=true;
ADOQuery2.Close;
ADOQuery2.sql.Clear;  
ADOQuery2.SQL.Add('SELECT *');
ADOQuery2.SQL.Add('FROM Отдел_кадров'); 
ADOQuery2.SQL.Add('WHERE'+'year>IntToStr(StrToInt(Edit3.Text))');
year:=yearof(now)-ADOQuery2.FieldByName('Дата_приема').AsInteger;
ADOQuery2.Open;
выходит ошибка Cannot access field 'Дата_приема' as type Integer;
в каком типе ее можно представить если не integer?
Seva2011 вне форума Ответить с цитированием
Старый 28.01.2012, 22:07   #15
Seva2011
Пользователь
 
Регистрация: 07.12.2011
Сообщений: 31
По умолчанию

Цитата:
Сообщение от KoliyR Посмотреть сообщение
проще будет по скайпу показать
Как таблицы подключить,
Как фильтрацию по ним делать
Как с запросами работать по другому (хотя они не нужны здесь)
Как calkulate подя делать - вот что тебе сейчас нужно
тогда проще видеоурок записать).
Seva2011 вне форума Ответить с цитированием
Старый 28.01.2012, 22:15   #16
alexiz
Пользователь
 
Регистрация: 19.08.2010
Сообщений: 54
По умолчанию

Цитата:
Сообщение от Seva2011 Посмотреть сообщение
а как это сделать? там же нужно от даты приема до настоящей даты подсчитать количество лет и как то сделать сравнение. вот этого не знаю как сделать.
alexiz, мой запрос должен выглядеть так?
'SELECT * FROM Отдел_кадров WHERE :ADATE-Дата_приема>'+strtoint(edit3.text);
Прошу прощения, малость соврал. Простое вычитание дает разницу в днях, а не годы.

Код:
SELECT * FROM Отдел_кадров 
WHERE extract(year from 'Дата_приема')>:NYEAR
а в Access есть еще такой вариант:

Код:
SELECT * FROM Отдел_кадров WHERE DateAdd("yyyy", 25, 'Дата_приема')<:ADAte
анализируется 'Дата_приема' + 25 лет, а параметр ADATE надо соответственно рассчитать.
Ваша благодарность может быть материальной:
WM R103871054215, WM Z710411027344, ЯндД: 410011167596676
alexiz вне форума Ответить с цитированием
Старый 28.01.2012, 22:17   #17
KoliyR
Пользователь
 
Регистрация: 01.09.2009
Сообщений: 55
По умолчанию

Seva2011

1. Дата - это число, но не совсем что ты себе представляешь ...,
AsInteger - не правильно
2. Предлагаю запросы сделать в мастере запросов Access
в нем проще работать ...,
SQL код сможешь скопировать по просмотру SQL



Еще
1. функция yearof это функция библиотеки dateutils (она должна присутствовать в Unit - проверь)
2. Поле в запросе должно быть добавлено я не уверен что так будет работать
у тебя запрос добавляет все поля т.е. *
лучше может использовать ADOQuery2.Fields[номер - нужно посмотреть какой он в таблице].AsDatetime
year:=yearof(now-ADOQuery2.FieldByName('Дата_приема' ).AsDatetime);
Обучение, задания по Делфи http://KoliyR.tk
KoliyR вне форума Ответить с цитированием
Старый 28.01.2012, 22:28   #18
Seva2011
Пользователь
 
Регистрация: 07.12.2011
Сообщений: 31
По умолчанию

переделал в это
Код:
procedure TForm1.Button4Click(Sender: TObject);
var year,year1:tDatetime;
i:Integer;
begin
if Edit3.Text<>'' then 
begin
ADOQuery2.Active:=true;
ADOQuery2.Close;
ADOQuery2.sql.Clear;  
ADOQuery2.SQL.Add('SELECT *');
ADOQuery2.SQL.Add('FROM Отдел_кадров'); 
ADOQuery2.SQL.Add('WHERE'+'year>IntToStr(StrToInt(Edit3.Text))');
year:=ADOQuery2.FieldByName('Дата_приема').AsDateTime;
year1:=yearof(now) - year;
DateToStr(year1);
ADOQuery2.Open;
и все я запутался) после того как я вычислил сколько лет стаж, мне нужно получить число которое должно сравниваться с edit3.text. в строку перевести получается а в интежер нет. ведь в year1 теперь количество лет как теперь цифру от туда вытащить?

Последний раз редактировалось Seva2011; 28.01.2012 в 22:33.
Seva2011 вне форума Ответить с цитированием
Старый 28.01.2012, 22:32   #19
alexiz
Пользователь
 
Регистрация: 19.08.2010
Сообщений: 54
По умолчанию

Цитата:
Сообщение от alexiz Посмотреть сообщение
..анализируется 'Дата_приема' + 25 лет, а параметр ADATE надо соответственно рассчитать.
продолжение - вот такой запрос прекрасно отделяет старичков от новичков. Проверил сейчас.

Код:
SELECT [Дата_приема]
FROM Отдел_кадров
WHERE DateAdd("yyyy",25,[Дата_приема])<"2012-01-28";
и в Дельфи:

Код:
ADOQuery2.Close;
ADOQuery2.sql.Clear;  
ADOQuery2.sql.Text:='SELECT [Дата_приема] FROM [Отдел_кадров] WHERE DateAdd("yyyy",25,[Дата_приема])<:ADATE';
ADOQuery2.Parameters.Parambyname('ADATE').Value:=Date; //сегодняшняя дата
ADOQuery2.Open;
Ваша благодарность может быть материальной:
WM R103871054215, WM Z710411027344, ЯндД: 410011167596676
alexiz вне форума Ответить с цитированием
Старый 28.01.2012, 22:56   #20
KoliyR
Пользователь
 
Регистрация: 01.09.2009
Сообщений: 55
По умолчанию

Все я дома
подключайся в скайп, - так проще будет - а ты посмотришь
скайп KoliyR
Обучение, задания по Делфи http://KoliyR.tk
KoliyR вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Access отдел кадров! julia89spb Помощь студентам 18 30.03.2019 01:07
отдел кадров gergert_andrei Фриланс 6 29.11.2011 16:23
лаба отдел кадров gergert_andrei C++ Builder 1 29.11.2011 09:03
Программа Отдел кадров (с оплатой) denis! Фриланс 5 16.02.2011 21:02
отдел кадров на delphi denis! Помощь студентам 1 15.02.2011 00:42