773 / 254 / 43
Регистрация: 09.12.2016
Сообщений: 850
1

Запрет на повторное введение записи

09.10.2017, 18:10. Показов 1280. Ответов 3
Метки нет (Все метки)

Добрый день!

На предприятии работают работники. Надо не дать пользователю ввести в базу еще раз того самого работника.

В настоящее время я создал составной индекс, включающий поля: Фамилия, Имя, Отчество, ДатаРождения. Но индекс срабатывает только при сохранении записи. Выводит сообщение: «Не удалось внести изменения ... повторяющие значения в индексе ..». А до этого времени пользователь уже успевает ввести Документ, МестоЖительства и т.п.

Конечно, может быть и так, но было бы лучше, если проверка проводилась бы сразу после заполнения четвертого поля ДатаРождения.

Посоветуйте пожалуйста, как это сделать.
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
09.10.2017, 18:10
Ответы с готовыми решениями:

Как ограничить повторное введение символа?
Как сделать так , чтобы нельзя было ввести более 1-го раза цифру 0 и нельзя было чтобы после нуля...

Запрет введение букв
Здравствуйте, как можно сделать так, чтобы при вводе данных, если была введена буква выводилась...

Запрет на введение отрицательных чисел
Здравствуйте! Помогите переделать пример. У меня есть 2 поля: код и стаж, которые не могут быть...

Запрет на введение букв,символов и т.д.
Здравствуйте.Помогите поставить запрет на введение букв,символов и т.д....чтобы вводить можно было...

3
Эксперт MS Access
26720 / 14400 / 3190
Регистрация: 28.04.2012
Сообщений: 15,782
09.10.2017, 18:26 2
Лучший ответ Сообщение было отмечено tkrainyk как решение

Решение

Можно и так. Но в форме, не в таблице непосредственно. Надо на событии BeforeUpdate поля даты рождения проверять есть ли такой в базе
Visual Basic
1
2
3
4
5
6
7
8
Dim n
n=currentdb.openrecordset("select count(*) from Таблица " _
& " where Фамилия='" & me.Фамилия & "' and Имя='" & me.Имя & "' and Отчество='" & me.Отчество & "' " _
& " and ДатаРождения=" & format(me.ДатаРождения, "\#mm\/dd\/yyyy\#")).fields(0)
if n>0 then
  msgbox "Есть такой. Исправьте данные или откажитесь от ввода"
  'cancel=true
end if
1
773 / 254 / 43
Регистрация: 09.12.2016
Сообщений: 850
09.10.2017, 19:05  [ТС] 3
Спасибо!

Работает как и хотелось.

Если да, то хотелось бы еще услышать ваше мнение как специалиста: забрать составной индекс, или он не сильно влияет на скорость работы Access?
0
Эксперт MS Access
26720 / 14400 / 3190
Регистрация: 28.04.2012
Сообщений: 15,782
09.10.2017, 21:44 4
Я не думаю, что один составной индекс может хоть как-то замедлить работу Вашей базы. Если конечно Вы не делаете обработку вконтактика или фейсбука с миллионами посетителей.
Индексы в принципе замедляют ввод. Особенно пакетный на больший таблицах, поскольку одновременно идет построение индексных таблиц. Но дают огромный выигрыш в скорости выборки. Бывают конечно случаи когда избыток индексов, вместо ускорения давал падение скорости обработки, но это ж какое их количество должно быть...
3
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
09.10.2017, 21:44

Запрет на повторное нажатие кнопок
Приветствую. Подскажите, как можно запретить повторное нажатие кнопок где-то секунды на две. То...

Запрет на повторное голосование (cookie)
Здравствуйте! Нужна помощь в доработке кода. Значит есть "сайт-голосовалка". В нем все...

Запрет на повторное перепроведение документа по условию
Помогите пожалуйста. Не получается реализовать запрет на перепроведение. Т.е. я создаю документ в...

Сделать запрет на повторное открытие окна
Как можно сделать запрет на повторное открытие окна? Чтобы было невозможно открыть одно и то же...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.