Невозможно добавить запись с идентификатором из другой таблицы

У меня есть база данных, которая функционирует аналогично системе «службы поддержки» - внешний пользователь создает тикет запроса, затем консультант будет использовать базу данных для различного отслеживания и отчетности.

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

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

Все эти рабочие листы заполняют таблицу «Консультации», в то время как начальные запросы находятся в таблице «Запрос». В таблице «Консультации» есть только одна запись для каждой записи в «Запросе» (отношение 1: 1).

Вот код, который мне нужно открыть для форм (листов):

Private Sub ButtonGap_Click()
DoCmd.OpenForm "Gap Analysis", acNormal, , "[ID] = " & Me!ID, acFormEdit, acDialog
End Sub

Это работает только частично. Если в таблице «Консультации» есть информация с идентификатором, который соответствует идентификатору из «Запроса» (то, что они выбрали в поле со списком в начале), рабочий лист откроется предварительно заполненным и доступным для редактирования. Большой!

Но ... если в таблице «Консультации» нет существующей информации с идентификатором, который соответствует идентификатору из «Запроса», рабочий лист откроется пустым для новой записи. Эта запись автономна с того места, где закончилась таблица "Консультации". Это создает проблему, если поступило несколько запросов - мы не всегда работаем над ними по порядку, поэтому новый идентификатор записи в «Консультации» не совпадает с существующей записью из «Запроса».

Я уверен, что упускаю из виду нечто невероятно простое. Кто-нибудь может помочь?


person britne    schedule 17.12.2014    source источник
comment
Какие ключи находятся в таблице запросов и консультаций? Является ли Request.ID автоматическим номером? Может ли быть несколько записей Consulting для любой записи запроса? Иметь AutoNumber ID для каждой таблицы - это нормально, но вы должны иметь возможность связать консультацию с запросом.   -  person Wayne G. Dunn    schedule 18.12.2014
comment
И Request, и Consulting используют цифровые ключи с автонумерацией (оба называются ID). Имеется отношение 1 = 1 - для каждой записи в Request будет только одна запись в Consulting. Я пытаюсь использовать ключ из запроса для создания / обновления записи в Консультации.   -  person britne    schedule 18.12.2014
comment
Если вы настаиваете на использовании этого ключевого отношения - и использовании AutoNumber - то вы никогда не сможете получить его на 100% правильно. Лучше всего изменить код, в котором создается «Запрос», чтобы одновременно автоматически создавать «пустую» консультационную запись. В зависимости от того, сколько пользователей вводят запросы или добавляют записи о консультациях, вы все равно можете рассинхронизироваться на миллисекунды. Чтобы обезопасить себя от ошибок, вам нужно заблокировать таблицу запросов на время добавления, а затем создать консультационную запись перед снятием блокировки. Или создайте поле ключа консультации, которое не является AutoNumber, но равно ключу запроса.   -  person Wayne G. Dunn    schedule 18.12.2014
comment
Вы говорите, что ваши две таблицы имеют отношение 1: 1, но вы на самом деле установили эти отношения? Если да, то какие данные связывают эти два поля? Кроме того, если для каждой записи запроса существует только одна консультационная запись, то почему они должны быть в отдельных таблицах?   -  person Aiken    schedule 18.12.2014
comment
Я не настаиваю на использовании чего-либо, просто пытаюсь заставить это работать. Как мне создать пустую запись в таблице Consulting при отправке запроса? Я пытался сделать это с помощью запроса на добавление, но я тоже не могу заставить его работать.   -  person britne    schedule 18.12.2014
comment
Да, отношения установлены. Данные, которые должны совпадать, - это идентификатор (поступает запрос с идентификатором, создается соответствующая запись в консультации), но было бы полезно также предварительно заполнить рабочие листы информацией из запроса. Я предполагаю, что все может быть в одной таблице, но как только я разберусь с этой частью, есть еще две таблицы, которые нужно связать, еще одна с соотношением 1: 1 и последняя с соотношением 1: многие.   -  person britne    schedule 18.12.2014


Ответы (1)


Похоже, мне удалось найти способ сделать это. Если я что-то пропустил, дайте мне знать! Я больше ничего не хочу ломать. :)

Я создал запрос, чтобы найти несопоставленные записи, предоставив мне список всех идентификаторов из запроса без соответствующего идентификатора в Consulting.

Оттуда я основал запрос на добавление на основе этих результатов, чтобы добавить только недостающие идентификаторы в Consulting.

Этот запрос выполняется при отправке формы запроса:

Private Sub Form_AfterUpdate()
DoCmd.OpenQuery "Add Blank Consulting"
End Sub

Теперь мои рабочие листы в форме Консультации заполняются правильным идентификатором!

person britne    schedule 18.12.2014
comment
Что-то мне кажется странным. Если у вас есть две таблицы, независимо от того, связаны ли они, каждая с полем AutoNumber, и вы добавляете 5 записей в T1, прежде чем добавлять что-либо в T2, первое добавление к T2 приведет к значению 1. Вы уверены, что связь построен на полях AutoNumber в T1 и T2? Если бы мой был введен пятый запрос, но первый работал, мой идентификатор консультанта был бы 1, а не 5. - person Wayne G. Dunn; 18.12.2014
comment
Мне пришлось переключить поле autonumber в консультации на number, чтобы оно работало. Позже это вызовет у меня проблемы? - person britne; 19.12.2014
comment
Предполагая, что ваше поле `` ID '' в таблице Consulting теперь является `` длинным целым числом '' (таким же, как AutoNumber), и вы устанавливаете его как свой первичный ключ (дублирование не допускается или не требуется), вы можете связать таблицу запроса, и все будет в порядке . Когда вы сохраняете запись в Консалтинге, вы просто устанавливаете ID таким же, как ваш Request ID. Это хорошо. - person Wayne G. Dunn; 19.12.2014
comment
Отлично, спасибо за то, что так хорошо объяснили, что я смог что-то придумать! - person britne; 19.12.2014