2 / 2 / 0
Регистрация: 16.08.2015
Сообщений: 67
1

Запрет ввода повторяющихся данных

06.03.2018, 20:50. Показов 6992. Ответов 14
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Уважаемые Гуру помогите пожалуйста.
Есть база данных, форма в ACCESS на компе, таблицы на серваке MySQL, имеется поле с названием клиента, на нём выставлен параметр "уникальное", при создании новой записи, если вводимое название уже имеется в базе вываливается ошибка, подскажите пожалуйста, как сделать так, чтобы при такой ошибке выходило окно с надписью "КЛИЕНТ С ТАКИМ ИМЕНЕМ УЖЕ ЕСТЬ" и кнопка закрыть, при нажатии на которую данные не сохранялись и форма редактирования закрывалась.
Миниатюры
Запрет ввода повторяющихся данных  
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
06.03.2018, 20:50
Ответы с готовыми решениями:

Запрет ввода в форму повторяющихся значений
Подскажите как организовать запрет ввода в форму повторяющихся значений не на уровне таблицы в...

Ввод анных в Access только через форму. Запрет ввода данных напрямую в таблицу
Добрый день, Скажите, пожалуйста, есть ли возможность в Access запретить добавлять запись напрямую...

Запрет ввода определенного диапазона дат
Помогите пожалуйста! Есть таблица договоров клиентов и форма для заполнения этой таблицы.. Есть...

Запрет ввода в поле подчиненной формы
Здравствуйте. Делаю в Аксесс форму для ввода данных с подчиненной формой. На главной форме есть...

14
71 / 71 / 16
Регистрация: 07.05.2014
Сообщений: 181
06.03.2018, 23:08 2
После обновления названия клиента проверить есть такой или нет, это самый простой способ. Остальные более затратные.
0
Мы один, давай на "ты"
3421 / 1299 / 312
Регистрация: 16.06.2016
Сообщений: 3,044
07.03.2018, 04:12 3
Eugeniooo, сделай обработку ошибок, там и выводи какое хочешь окно с нужной тебе записью.
0
2 / 2 / 0
Регистрация: 16.08.2015
Сообщений: 67
11.03.2018, 22:31  [ТС] 4
Панург, если бы я знал как это сделать, я бы помощи не просил.
0
Мы один, давай на "ты"
3421 / 1299 / 312
Регистрация: 16.06.2016
Сообщений: 3,044
12.03.2018, 05:19 5
Лучший ответ Сообщение было отмечено Eugeniooo как решение

Решение

Eugeniooo, можно попробовать так.
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
Private Sub Form_Error(DataErr As Integer, Response As Integer)
On Error Resume Next
    Select Case DataErr
        Case 3146
            DataErr = 0
            Response = acDataErrContinue
            MsgBox "КЛИЕНТ С ТАКИМ ИМЕНЕМ УЖЕ ЕСТЬ",vbCritical
            Me.Undo
            Me.SetFocus
            Docmd.Close
    End Select
End Sub
Есть шанс, что это не сработает...
1
Эксперт MS Access
7395 / 4532 / 295
Регистрация: 12.08.2011
Сообщений: 14,015
16.03.2018, 10:11 6
Нет смысла обрабатывать ошибку ODBC 3146
ошибка может быть любой, а вам всегда будет писать, что такой клиент существует.
Я в своё время просто находил ошибку в самой БД на сервере SQL и правил там текст, вместо "чё-то про уникальность" ставил
"Такой номер уже существует" Но у меня был MS SQL, не знаю, позволяет ли mysql.
0
2 / 2 / 0
Регистрация: 16.08.2015
Сообщений: 67
29.03.2018, 01:43  [ТС] 7
Профессионалы ну помогите пожалуйста
я где-то близко к решению, но без Вас никак. Использую следующий код, который вешаю на ошибку в форме:

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
  Private Sub Form_Error(DataErr As Integer, Response As Integer)
  On Error GoTo Err_Resume
  Select Case DataErr
         Case 3146
             Response = acDataErrContinue
             MsgBox "КЛИЕНТ С ТАКИМ ИМЕНЕМ УЖЕ ЕСТЬ!!!"
     End Select
  Exit_Proc:
     Exit Sub
   Err_Resume:
      Resume Exit_Proc
   End Sub
Далее ввожу наименование клиента, который уже есть в базе и при закрытие формы ошибка не выходит, но запись не сохраняется.
А если после внесения наименование клиента, который уже есть в базе я нажимаю кнопку меню ОБНОВИТЬ, то в этом случае выходит необходимое мне поле "КЛИЕНТ С ТАКИМ ИМЕНЕМ УЖЕ ЕСТЬ!!!"
Подскажите пожалуйста код данной кнопки.
Миниатюры
Запрет ввода повторяющихся данных  
0
22 / 20 / 5
Регистрация: 01.02.2013
Сообщений: 79
29.03.2018, 09:25 8
Обработка ошибки это костыль, который рано или поздно может выстрелить (ибо программа должна работать без ошибок).
Я при добавлении записей все поля формы делаю "Свободный".
Далее уже либо при нажатии на кнопку ОК либо при потере фокуса с заполненного поля делается проверка нужных полей на совпадения или на правильность введенных данных, типам данных в таблице (дата, число, текст и т.д.).
Ну затем добавление записи обычным SQL-запросом.
Соответственно при нажатии на кнопку Отмена - никакие данные никуда не заносятся и не проверяются и следовательно не дают никаких ошибок.
1
Эксперт MS Access
17485 / 7247 / 1651
Регистрация: 21.06.2012
Сообщений: 13,861
29.03.2018, 09:37 9
Цитата Сообщение от _Chenia_ Посмотреть сообщение
Ну затем добавление записи обычным SQL-запросом.
Угу. А запись с такими полями уже добавлена другим пользователем. И необрабатываемая ошибка ... .
1
Мы один, давай на "ты"
3421 / 1299 / 312
Регистрация: 16.06.2016
Сообщений: 3,044
29.03.2018, 09:50 10
Цитата Сообщение от _Chenia_ Посмотреть сообщение
костыль, который рано или поздно может выстрелить
убийственный аргумент. чесслово никогда огнестрельных костылей не видел.

Цитата Сообщение от _Chenia_ Посмотреть сообщение
Я при добавлении записей все поля формы делаю "Свободный".
Нужно иметь очень веские причины, чтобы в среде, где одно из главных достоинств лёгкость разработки ПРИВЯЗАННЫХ к данным форм и отчётов, делать непривязанные (Unbound) формы и городить добавление данных запросами.

К чему Access в данном случае?

Всё на правах ИМХО.

Добавлено через 7 минут
Eugeniooo, а что в коде обработки ошибки убрал откат?
1
2 / 2 / 0
Регистрация: 16.08.2015
Сообщений: 67
31.03.2018, 20:46  [ТС] 11
так а всё таки как при помощи VBA с эмитировать нажатие данной кнопки?
Миниатюры
Запрет ввода повторяющихся данных  
0
Модератор
Эксперт MS Access
6003 / 2832 / 692
Регистрация: 12.06.2016
Сообщений: 7,592
31.03.2018, 21:19 12
Цитата Сообщение от Eugeniooo
как при помощи VBA с эмитировать нажатие данной кнопки?
Сымитировать?
Хотя бы так:
Visual Basic
1
Me.Requery
0
2 / 2 / 0
Регистрация: 16.08.2015
Сообщений: 67
31.03.2018, 22:32  [ТС] 13
ничего не понимаю, почему при внесении повторяющегося значения в поле клиент и последующего нажатия кнопки "Обновить всё"
Запрет ввода повторяющихся данных


всё работает как положено, то есть начинается обработка ошибки и выходит окно:
Название: img-2018-03-31-22-22-56.png
Просмотров: 272

Размер: 3.8 Кб

а если я ставлю код Me.Requery на событие: "Потеря фокуса", то вылетает ошибка:
Запрет ввода повторяющихся данных


Помогите пожалуйста решить данную головоломку
0
71 / 71 / 16
Регистрация: 07.05.2014
Сообщений: 181
01.04.2018, 17:23 14
Сделайте такой-же обработчик ошибки на это событие как выше.
Событие "Потеря фокуса" для поля или формы?
Если для поля, то лучше на "Обновление данных", если нет обязательных полей на форме.
Если "Потеря фокус" для формы можно оставить так, а можно на событие "закрыть" и добавить строку DoCmd.CancelEvent в обработчик. Для отмены события.
0
Эксперт MS Access
7395 / 4532 / 295
Регистрация: 12.08.2011
Сообщений: 14,015
02.04.2018, 08:57 15
1.Ставьте обработку ошибки на "выход" из поля и при дубликате просто cancel = true
Пользователь получит сообщение и вернётся на поле. Это вариант жёсткий, пока кого-то не введёт.
2. Ставьте обработку на событие "после изменения", тогда при дубликате выводите сообщение и присваивайте полю Null
Если конечно в таблице на сервере не стоит not null в свойствах поля.
3. Если стоит Not Null, тогда либо вариант 1, либо заменяйте выдуманным клиентом.
4. Если поле с именем клиента в начале ввода, то можно ещё использовать me.undo - это отменит ввод на форме и позволит начать с начала.

есть и другие варианты, но мне хватало вышеприведённых.
1
02.04.2018, 08:57
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
02.04.2018, 08:57
Помогаю со студенческими работами здесь

Запрет ввода пустого значения в поле формы
Прошу помощи - при формировании формы на основе таблицы - необходимо запретить в форме вводить...

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

Запрет ввода повторных значений в поля подчиненных форм
Здравствуйте. В базе есть главная форма (A), содержащая подчиненные формы (B и C). Есть ли способ...

Триггер на запрет ввода одинаковых номеров телефона
Нужна помощь, не понимаю как сделать триггер, который будет запрещать ввод одинаковых номеров...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru