MS Access Linked Combobox обновляет исходную таблицу, когда я хочу, чтобы она была только для чтения - PullRequest
0 голосов
/ 08 апреля 2020

Извините за длинное объяснение; Я надеюсь, что подробности помогут объяснить, что я хочу сделать.

В Access 2016 я хочу, чтобы пользователь мог go в форме и выбрать комбинацию двух значений из одной таблицы (читайте только), затем введите дополнительные данные в различные поля, которые соответствуют этой комбинации. Когда запись сохранена, дополнительные сведения сохраняются в другой таблице вместе с идентификатором строки, который соответствует выбранной комбинации.

Например, скажем, у меня есть база данных для отслеживания ответов компании относительно того, как они отвечают требованиям различных государственных нормативных актов. У меня есть таблица для правил с полями для:

  1. Идентификатор строки
  2. Набор правил, со значениями stati c, хранящимися в списке значений (то есть "HIPAA", "PCI DSS" ", et c.)
  3. Номер правила
  4. Текст правила

В этой таблице номера правил могут совпадать Наборы правил, но комбинация уникальна, поэтому я добавил уникальный индекс для этих двух столбцов.

У меня есть другая таблица, в которой содержится информация об ответах. Таблица ответов имеет столбец FK, связанный с идентификатором строки в таблице правил. Между Ответами: Правилами существует отношение 1: M.

Я хочу, чтобы пользователь мог выбрать Набор правил из раскрывающегося списка, а затем иметь второй раскрывающийся список, в котором будут отображаться только соответствующие Правила. номера на основе набора правил. Затем они могут ввести соответствующие данные ответа в другие поля.

Я создал форму, используя мастер форм с полями со списком для набора правил и имени регулирования, а также поля для данных ответов. Связывание комбо-боксов прекрасно работает. Я могу выбрать набор правил, и тогда он ограничивает список номеров правил только теми, которые применяются к этому набору правил. Тем не менее, он пытается обновить таблицу правил, когда я хочу, чтобы она была доступна только для чтения.

Допустим, у меня есть эти записи в таблице правил для набора правил - Номер регулирования HIPAA - 1.0 HIPAA - 1.1 HIPAA - 1.3 PCI DSS - 5a PCI DSS - 5b

I go в форме и выберите HIPAA в первом поле со списком. Второе поле со списком корректно показывает значения 1,0, 1,1, 1,3. Я выбираю 1.3 и ничего не делаю, кроме как пытаюсь закрыть форму. Я получаю сообщение об ошибке, в котором говорится, что запись не может быть сохранена, поскольку в результате в таблице правил будет дублированное значение Если я удаляю уникальное ограничение и повторяю шаги, я могу закрыть форму, но затем, когда я go перехожу к таблице правил, она перезаписывает данные, и теперь у меня есть две строки HIPPA с именем правила 1.3.

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

Я думаю, что это связано с отношением 1: M между наборами регулирования и регулированием. Числа, так что, когда я выбираю Reg Set, он выбирает запись из таблицы; затем я выбираю номер Reg, который может быть из другой строки. Я согласен с этим несоответствием в форме, потому что, когда я сохраняю запись ответа, я могу запросить таблицу правил для идентификатора строки, который соответствует выбранным значениям. Но я не могу понять, как удержать его от попыток обновить таблицу правил.

Любая помощь будет принята с благодарностью!

1 Ответ

0 голосов
/ 15 апреля 2020

Мне удалось получить помощь на другом форуме, поэтому я решил разместить ответ здесь на тот случай, если он поможет кому-то еще. В моем случае решение включает в себя кусочки ниже. № 4 - это то, чего мне не хватало.

1) Поле со списком Набор правил (более высокий уровень) должно быть свободным и иметь источник записи, равный Имени и идентификатору набора правил из таблицы Наборов правил.
2) Поле со списком Правил привязано к таблице откликов (там, где есть FK к таблице правил) и использует таблицу Правил в качестве источника записей. Источник записи ограничен на основе значения поля со списком "Набор правил".

3) Поле со списком "Набор правил" имеет событие После обновления, чтобы запросить поле со списком "Правила".
4) Затем есть бит кода VBA, который необходим для получения поля со списком Регулирование для отображения правильного значения на основе текущего значения поля со списком Регулирование. Это относится к форме на текущее событие:

'Check if this is a new record; if not then there is a value
' in the Regulation combo box that can be used to determine
' the value to display in the Regulation Set combo box.
If Me.NewRecord = False Then
  ' Lookup the Regulation Set
  Me.cboRegSet = DLookup("[ID]", "tblRegulationSet", "[ID] =" & _
    DLookup("[RegulationSetID]", "tblRegulation", "ID=" & Me.RegulationID))
  'Requery the Regulation combo box
  Me.cboRegulation.Requery
  ' Get the "Regulation.ID" based on the foreign key "RegulationID"
  Me.cboRegulation = DLookup("[ID]", "tblRegulation", "ID=" & Me.RegulationID)
  Else
  'If this is a new record, blank out the Regulation Set
  Me.cboRegSet = ""
End If
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...