Как предотвратить повторяющиеся записи в базе данных Access с помощью C #? - PullRequest
0 голосов
/ 16 мая 2009

У меня есть таблица MS Access, которая содержит один столбец и много строк. Значение текстового поля сохранено в этой таблице. Я хочу предотвратить отправку повторяющихся записей. Например, если я набираю «ankush» в текстовом поле, и эта запись уже существует в таблице, то я хочу отобразить msgbox, говоря, что это уже существует в таблице. используя c #

Ответы [ 5 ]

4 голосов
/ 16 мая 2009

Если поле не является вашим первичным ключом, вы можете установить индекс для поля, которое содержит 'ankush', и сделать этот индекс уникальным

[Index=Yes(no duplicates)]

, тогда Jet DB Engine не разрешит вставку и покажет сообщение по умолчанию.

Я работаю со старой версией Access, поэтому ваш пробег может отличаться, но для отображения настраиваемого сообщения об ошибке вам сначала нужно будет выполнить запрос для значения в таблице, например:

SELECT COUNT(MyField)as violated FROM MyTable WHERE MyField = 'input value here'

Затем добавьте ваш код, если он нарушен> 0, чтобы показать ваше окно сообщения.

3 голосов
/ 16 мая 2009

Вы можете создать уникальный ключ для столбца.

0 голосов
/ 17 августа 2017

Если [имя поля] = Я. имя поля в форме. Столбец (0), а не я.

Имя Me.field в форме. Отменить Me.Undo Exit Sub End If Если [имя поля] = Я. имя поля в форме. Column (0) и Me.NewRecord Тогда

Имя Me.field в форме. Отменить Me.Undo MsgBox "уже есть", vbInformation, "повторяется" Exit Sub End If End Sub

0 голосов
/ 18 мая 2009

Просто добавьте к тому, что предложил @ Gary.Ray: если в вашей таблице есть несколько ключей-кандидатов («Если поле не является вашим первичным ключом ...»), то сообщение об ошибке, бесполезно возвращаемое ACE / Jet, не скажу, какой ключ был нарушен:

Изменения, которые вы запросили в таблице не были успешными, потому что они будут создать повторяющиеся значения в индексе, первичный ключ или отношения. + Изменить данные в поле или поля, которые содержат дубликаты данных, удалите индекс или переопределить индекс, чтобы разрешить дублируйте записи и попробуйте снова.

К счастью, существует более одного способа реализации ключа, и использование ограничения CHECK имеет преимущество, заключающееся в возврате имени ограничения в сообщении об ошибке. Например, это ограничение CHECK будет дублировать столбец MyField:

ALTER TABLE MyTable ADD
   CONSTRAINT MyTable__MyField__no_dups_allowed 
      CHECK (NOT EXISTS (
                         SELECT T1.MyField 
                           FROM MyTable AS T1
                          GROUP
                             BY T1.MyField 
                         HAVING COUNT(*) > 1
                        ));

Для данных, которые не соответствуют «MyField», но удовлетворяют другим ключам в таблице, сообщение об ошибке будет:

Одно или несколько значений запрещены правило проверки 'MyTable__MyField__no_dups_allowed установить для «MyTable». Введите значение, которое выражение для этого поля может принимаем.

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

0 голосов
/ 17 мая 2009

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...