2013-12-12 5 views
0

Я новичок в доступе к Microsoft. Мне просто интересно, как я могу создать собственный первичный ключ? например abc-123 формат?Пользовательский первичный ключ для MS Access

+0

Как вы на самом деле хотите, чтобы часть 'abc' отображалась в разных кортежах. Некоторая проверка, я думаю, может помочь. –

ответ

2

Это зависит от того, как вы хотите создавать значения abc-123.

Если вы хотите создать их самостоятельно в своем коде, просто создайте столбец Text и используйте его в качестве основного ключа.

Если вы хотите Доступ для создания этих значений ... это на самом деле невозможно. Единственное, что Access может автоматически генерировать, - увеличить числовые значения (тип данных AutoNumber).

Так что лучше всего использовать AutoNumber как основной первичный ключ и создать значение abc-123 из этого только для отображения.

Вот некоторые примеры, как это сделать, из предыдущих аналогичных вопросов, которые я ответил в прошлом:


Отказ от ответственности: Я не» t знать, будет ли подобный подход работать в вашем случае.
Если нет, то вам нужно дать больше информации, как именно вы хотите, чтобы ваши номера должны быть созданы:

  • вы хотите, чтобы увеличить число?
  • Вы хотите, чтобы буквы менялись/«увеличивались»/всегда оставались неизменными?
2

На самом деле, вы можете создать триггер таблицы, если используете 2010 или позже. Триггер таблицы может занимать некоторое поле (где вы получаете abc), а затем какое-то другое поле (seq num), а затем добавляете + 1 к значению.

код «воздух» будет выглядеть следующим образом:

enter image description here

Прелесть триггера таблицы он работает на столе (двигатель данных) уровень, и, таким образом, если открыть базу данных с ODBC, VB.net, FoxPro, Access и т. Д., Тогда ключ ПК всегда будет автоматически генерироваться для вас.

+0

Спасибо, Альберт. Я попытался что-то подобное с «DMax()», и он работал, когда запись была вставлена ​​из самого Access, но это вызвало отказ INSERT от других приложений. («DMax не разрешен в макросе данных».) Я пытался использовать варианты выше в Access 2010, но если мой LookUpRecord пытается выполнить SELECT в той же таблице, к которой принадлежит Data Macro, я получаю «The», Действие макроса LookUpRecord имеет недопустимое значение для аргумента «Look Up A Record In». (Кажется, что SELECT из другой таблицы в порядке.) Не могли бы вы обновить свой ответ, чтобы предоставить рабочий пример? Благодаря! –

+0

Приведенный выше пример является рабочим примером (он пропускает код, если префикс никогда не существовал в базе данных).Если вы посмотрите в верхнем левом углу экрана, выберите «custpart» перед изменением заголовка окна. Таким образом, опубликованный код представляет собой процедуру хранения, выполняемую в таблице SAME, как код обновления. Важная часть - когда вы ссылаетесь на имя поля, ссылаетесь ли вы на текущую таблицу в результате триггера или на запрос? В результате обратите внимание, как я использовал псевдоним, чтобы отличить две таблицы. –

+0

Вы случайно создали свой пример в Access 2013? Я просто повторил то же самое в Access 2010 и получил ту же ошибку, которую я привел в своем предыдущем комментарии, когда попытался сохранить макрос Before Change. (См. Снимок экрана [здесь] (http://i.stack.imgur.com/jIqwf.png).) Я замечаю, что макет редактора макросов на скриншоте немного отличается от моего, поэтому мне интересно, возможно ли ваш подход является результатом усовершенствования, введенного в Access 2013. –

Смежные вопросы