Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > MS Access > Проверка Паспорта РФ


Автор: broker_001 28.10.2012, 10:14
ДОбрый день. запутался. помогите пожалста.

Приходит клиент и чтоб вручную не проверять ликвидность паспорта, появилась необходимость проверить при добавлении клиента в базу.

есть поля 
дата рождения UserBirthDate ДД.ММ.ГГГГ
Дата выдачи паспорта PassportDate ДД.ММ.ГГГГ
возраст UsersYearsCalc INT((NOW - [UserBirthDate]) / 365)

паспорт надо менять в 20 и 45 лет. тут то и началась путаница


Автор: broker_001 28.10.2012, 13:04
Логика такая


=ЕСЛИ(И(NOW>=(NOW-(UserBirthDate+20));NOW<=(NOW-(UserBirthDate+45)));ЕСЛИ(И(PassportDate<(NOW-(UserBirthDate+45));PassportDate>(NOW-(UserBirthDate+20)));"valid";"invalid");ЕСЛИ(И(NOW>(NOW-(UserBirthDate+45));PassportDate>=(NOW-(UserBirthDate+45)));"valid";ЕСЛИ(И(NOW>(NOW-(UserBirthDate+14));NOW<(NOW-(UserBirthDate+20));PassportDate<(NOW-(UserBirthDate+20)));"valid";"invalid")))


дата выдачи у нас есть в 14 20 45 лет.
это код я сделал в ексель как его в мускул переделать?

Автор: broker_001 28.10.2012, 13:23
поменял синтаксис ошибка всеравно


IIf (OR (NOW>=(NOW-(UserBirthDate+20)), NOW <=(NOW - (UserBirthDate+45))), IIF (OR (PassportDate <(NOW-(UserBirthDate+45)), PassportDate > (NOW-(UserBirthDate+20))), 'valid','invalid'), IIF (OR (NOW>(NOW-(UserBirthDate+45)), PassportDate>=(NOW-(UserBirthDate+45))), 'valid', IIF(OR(NOW>(NOW-(UserBirthDate+14)), NOW<(NOW-(UserBirthDate+20)), PassportDate<(NOW-(UserBirthDate+20))), 'valid', 'invalid')))

Автор: Akina 28.10.2012, 21:11
Цитата(broker_001 @  28.10.2012,  14:04 Найти цитируемый пост)
это код я сделал в ексель как его в мускул переделать?

Excel, MySQL... а какого лешего тема создана в MS Access?

Автор: broker_001 29.10.2012, 08:40
 логику я сделал в екселе (что работает) мне сейчас эту же формулу надо сделать в акцесс

Автор: Akina 29.10.2012, 08:58
broker_001, напиши пользовательскую функцию проверки валидности паспорта. Передавай ей дату рождения, дату выдачи паспорта, и считай, валиден он или нет.

Автор: broker_001 29.10.2012, 12:05
Эх, я бы знал как. я знаю что самое простое в запросе указать sql запрос

Автор: Akina 29.10.2012, 12:29
А в чём сложности?
Берём текущую дату и дату рождения, получаем возраст клиента. Исходя из возраста, считаем самую раннюю из возможных дат выдачи ему паспорта, чтобы он был ещё валиден. Полученную дату сравниваем с датой выдачи. Если выдано раньше - посылаем нафиг.

Автор: tzirechnoy 29.10.2012, 18:22
Модератор: Сообщение скрыто.

Автор: bopoha 31.10.2012, 23:17
Для вычисления такого выражения стоит использовать процедуру. А еще лучше держать такой код не на сервере, а на клиенте.

Автор: Akina 1.11.2012, 07:35
Цитата(bopoha @  1.11.2012,  00:17 Найти цитируемый пост)
 А еще лучше держать такой код не на сервере, а на клиенте. 

Я думаю, и там, и там. На клиенте - в порядке входного контроля. На сервере - в порядке поддержания целостности и непротиворечивости информации.

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