1

У меня есть база данных с расширением accdb для расширения 2007 года, существует более или менее 30-40 таблиц с соответствующим первичным ключом «local_number». это текстовый первичный ключ с 10 длинами.Изменить ключ доступа Первичный ключ с отношениями

Как изменить длину этого первичного ключа на 30 БЕЗ удаления ранее всех отношений 30.

  1. Аналогичный вопрос. Мне нужно добавить первичный ключ для моего ПК «local_number». Мне нужно добавить «Дата» в составе ПК. Тогда доступ просто разрешит это, если я сначала удалю все отношения.

Как можно избежать этого предупреждения и изменить мой ПК, игнорируя это сообщение.

Основанием для составления ПК в каждой таблице является требование об изменении исторических данных в записях.

обновление, Кто-то знает, возможно ли это, или я хочу удалить все отношения?

ответ

1
  1. Сделайте копию базы данных с существующими отношениями.

  2. Удалить все отношения в оригинальной копии.

  3. Затем используйте code to copy the relationships из резервной копии в оригинальную копию.

Я предполагаю, что вы сохраняете такое же имя для поля PK, который редактируется, но несмотря на это, вы можете изменить код из базы знаний MS в цитированном URL, чтобы учесть это.

+0

Спасибо за решение, действительно очень помогает и экономит время. – MaK

+0

Привет, Дэвид, я сохраняю одно и то же имя для ПК, но индекс PK страдает изменениями. Теперь мне не нужно это поле с индексом. , но после того, как я изменил эту опцию на No index или на Индексированное свойство поля было изменено с Yes (Duplicates OK), отношения не копировались из исходного файла. Но у меня нет идеи, как изменить этот код. Ошибка в этой строке «ThisDb.Relations.Append ThisRel» Можете ли вы помочь мне изменить код, чтобы разрешить копирование отношений после изменения индекса. – MaK

+0

Какая ошибка возникает в этой строке? Вероятно, у вас есть дубликаты записей в одном из полей PK, поэтому вы не сможете воссоздать отношения. –

1

вы можете использовать объектную модель доступа к базе данных и VBA код, который будет автоматически

  1. добавить новые поля в соответствующих таблицах (как первичные ключи и FKs)
  2. На основе уже существующих отношений, обновить все значения FK с соответствующими значениями PK,
  3. Перерыв существующих отношений
  4. создать новые отношения

Чтобы узнать, какие отношения необходимо заменить, вы можете просматривать объекты базы данных.

Этот код может вдохновить вас (написанный на лета/может быть ошибочной/чеком, соответствующей помощи):

for i = 0 to mydatabase.Relations.count - 1 
    Debug.Print mydatabase.relations(i).name 
    for j = 0 to myDatabase.relations(i).fields.count -1 
     debug.print myDatabase.relations(i).fields(j).name 
    next j 
next i 
+0

спасибо, не могли бы вы объяснить больше 2 шага. И в шагах 3 и 4 это означает, что каждое реальное изменение, которое мне нужно изменить, мне нужно удалить и воссоздать? – MaK

+0

Шаг 2: предположим, что у вас есть Tbl_Main, где PK - id_Main и Tbl_Child, где PK - id_Child и где id_Main - это внешний ключ. Затем вы создадите поле id_MainNew как в Tbl_Main, так и в Tbl_Child. Используя существующее отношение, вы обновите Tbl_Child.id_MainNew значением Tbl_main.id_MainNew. На шаге 3 связь, существующая между Tbl_Main и Tbl_Child и на основе id_Main, удаляется. На шаге 4 создается новое отношение между Tbl_Main.id_MainNew и Tbl_Child.id_MainNew –

+0

ОК, это ясно.спасибо – MaK