| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > 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 |
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 |
Я думаю, и там, и там. На клиенте - в порядке входного контроля. На сервере - в порядке поддержания целостности и непротиворечивости информации. |