Форум программистов, компьютерный форум, киберфорум
Наши страницы
Microsoft Access
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 4.76/41: Рейтинг темы: голосов - 41, средняя оценка - 4.76
tarara
1

Проверка на уникальность поля, при добавлении новой записи

23.05.2010, 09:55. Просмотров 7415. Ответов 30
Метки нет (Все метки)

Помогите, плиз.
Есть форма добавления записей в таблицу.
Есть некое уникальное поле, при добавлении записи в таблицу, вводе значения в поле неоходима проверка на уникальность.
При этом, если значение совпадает с какм-то значением, необходимо сообщение типа 'номер карты уже существует'
то есть, так чтобы пользователь знал, что ошибка в конкретном поле?
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
23.05.2010, 09:55
Ответы с готовыми решениями:

VB Проверка на уникальность, при добавлении новой записи
Всех приветствую. Столкнулся с небольшой проблемой проверки на уникальность (поле "Номер" ) при...

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

Ошибка при добавлении новой записи в подчиненной форме
Ошибка возникает при добавлении новой записи в подчиненной форме Form2

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

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

30
GeVsT
0 / 0 / 0
Регистрация: 23.05.2010
Сообщений: 21
23.05.2010, 13:27 2
Может попробовать на событие после обновления контрола повесить проверку типа если DCount с условием > 0, то значит такие данные уже есть , сообщение, после переводим фокус обратно на контрол и присваиваем контролу = '', это в случае если запись не сохраняется сразу при добавлении, если сохраняется сразу то DCount > 1
0
tarara
23.05.2010, 13:30 3
Еще раз плиз не совсем въехала. не большой я спец в аксесе..
там есть в свойствах поля типа условие назначение.. теоретически туда закатать, но не могу придумать какое бы такое условие сосавить, чтобы оно проверялось ((
в этом случае можа и сообщение об ошибке выкидывать..
GeVsT
0 / 0 / 0
Регистрация: 23.05.2010
Сообщений: 21
23.05.2010, 14:09 4
Допустим форма основана на таблице с наименованием Tabl_, в которой поле называется kode_record, в форме проверяемое поле пусть тоже именуется kode_record.
тогда подсчет можно получить таким образом:
Код
DCount('kode_record', 'Tabl_', '[Tabl_]![kode_record]=' & Me.kode_record.Value)
И поправлю себя впредыдущем сообщении..
Процедуру проверки лучше вешать на событие До обновления..
0
23.05.2010, 14:09
tarara
23.05.2010, 15:01 5
Подставляю я свои поля и тбалицы
получаю вот такую фигню:
DCount([Number_card],[CARD_table], '[CARD_table]![Number_card]=' & Me.Number_card.Value)

(имена полей что в таблице, что в форме у меня и правда совпадают)

цепляю событие.. к полю , а он не дает выйти.. говрит какую фигню (
tarara
23.05.2010, 15:27 6
вообщем выражение, смоми полями..
DCount('[Number_card]','CARD_table', '[CARD_table]![Number_card]=' & Me.Number_card.Value)

но если это выражение втыкать в событие до обновление, да или хоть куда..он говорит задано значение для операции без операции ..
типа ошибка синтаксиса..
GeVsT
0 / 0 / 0
Регистрация: 23.05.2010
Сообщений: 21
24.05.2010, 06:00 7
Попробовал вот такое:
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
'Проверяем введенное число
'Если такой код есть, то:
If DCount('kode_record', 'Tabl_', '[Tabl_]![kode_record]=' & 
Me.kode_record.Value) > 0 Then
'Обнуляем поле кода
Me.kode_record.Value = 0
'Выдаем сообщение пользователю
MsgBox 'Введите уникальный номер !, попробуйте № ' & DMax('kode_record', 'Tabl_') + 1
'Возвращаемся обратно в поле кода
SendKeys '{LEFT}', False
End If
0
GeVsT
0 / 0 / 0
Регистрация: 23.05.2010
Сообщений: 21
24.05.2010, 06:00 8
Попробовал вот такое:
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
'Проверяем введенное число
'Если такой код есть, то:
If DCount('kode_record', 'Tabl_', '[Tabl_]![kode_record]=' & 
Me.kode_record.Value) > 0 Then
'Обнуляем поле кода
Me.kode_record.Value = 0
'Выдаем сообщение пользователю
MsgBox 'Введите уникальный номер !, попробуйте № ' & DMax('kode_record', 'Tabl_') + 1
'Возвращаемся обратно в поле кода
SendKeys '{LEFT}', False
End If
в 97 работает
0
GeVsT
0 / 0 / 0
Регистрация: 23.05.2010
Сообщений: 21
24.05.2010, 06:40 9
да, и извиняюсь, предыдущую процедуру вешал все же на событие после обновления..
0
tarara
24.05.2010, 09:10 10
я думаю, что можно просто на сравнение сдлеать то есть что значение в этом поле не равно.. и надо вытащить как массив, или просто селект все значения этго поля. есть какая-нить функция на этот счет?
может подскажите?
GeVsT
0 / 0 / 0
Регистрация: 23.05.2010
Сообщений: 21
24.05.2010, 10:47 11
Выслал на мыло рабочий примерчик, проверяйте.
0
Lenivec
24.05.2010, 12:07 12
А кто мешает данное поле в таблице сделать уникальным, а на форме в событии Form_Error выдать сообщение об ошибке.
tarara
24.05.2010, 12:10 13
а не фурыкает так.. он выдает очень длинное собственное сообщение на тему чтоошибка в уникальном поле или индексе или ключе и бла-бла-бла.. а мне надо чтобы было конкртетно написано по какому поводу ерундистика..
там есть еще такая фишка, что надо бы все же сохранить возможность занесия номера этой гребанной карты.. насильственно..
:-((
Lenivec
24.05.2010, 12:21 14
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
Private Sub Form_Error(DataErr As Integer, Response As Integer)
On Error GoTo Err_Resume
 
    Select Case DataErr
        Case {Номер ошибки}
            Response = acDataErrContinue
            MsgBox {Сообщение об ошибке}
    End Select
 
Exit_Proc:
    Exit Sub
Err_Resume:
    Resume Exit_Proc
End Sub
tarara
24.05.2010, 12:23 15
а это куда засунуть ) вы меня очень простите ) но даун есть даун ) научите ещ еплиз куда это втыкнуть )
Lenivec
24.05.2010, 12:29 16
У формы есть событие Error. Вот оно и расписано.
Если еще более подробно, то тогда вот:
1. У формы есть свойства.
2. На закладке События есть такое событие: Ошибка.
3. Выбираем там процедуру обработки события и в тексте пишем приведенный выше код.
Lenivec
24.05.2010, 12:32 17
Если нужно давать возможность ввода одинаковых номеров, но с предупреждением тогда вешаемя на Form_BeforeUpdate и там делаем SELECT по нашей таблице и смотрим есть таке значение или нет, соответственно дальше обрабатываем по ситуации.
tarara
24.05.2010, 12:32 18
ага, а код ошибки какой?? ((
Lenivec
24.05.2010, 12:35 19
Ну так в отладчике и посмотри какой номер ошибки (DataErr) передается в процедуру Form_Error.
Lenivec
24.05.2010, 12:38 20
Код ошибки: 3022
24.05.2010, 12:38
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
24.05.2010, 12:38

Автоматичесское заполнение поля при создании новой записи
Есть поле "фото", в котором хранится название файла картинки, которую отображает форма. Я хочу,...

Как сделать чтобы при добавлении новой записи в табилцу заносилось "текущая ДатаВремя" правильно?
Настройки таблицы, исходное состояние таблицы - см. скрин. 1. ДатаВремя для новой записи...

Как проверить при добавлении записей их уникальность и добавить с подтверждением?
День добрый. Есть две таблицы. поля одинаковы. надо данные из одной добавить во вторую , но при...


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

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

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