Как я могу ввести данные для таблицы «многие ко многим» в Access? - PullRequest
1 голос
/ 25 апреля 2019

Я уверен, что это основной вопрос, но я изо всех сил пытаюсь разобраться с Access.

В моем случае у меня есть две таблицы: Student и Subject, связанные между собой соединительной таблицей StudentSubject.,Учащийся и субъект имеют отношения многие ко многим, поскольку один учащийся может изучать несколько предметов, а один учащийся может изучать множество учащихся.

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

enter image description here

Когда я пытаюсь ввести что-либо в поле «SubjectName», он говоритMsgstr "Поле не может быть обновлено".Если я нажимаю «ОК», сообщение исчезает, и я могу что-то напечатать в поле, но как только я пытаюсь вставить что-то еще в запись ниже для «Тема», появляется та же ошибка.Затем, когда я нажимаю стрелку, чтобы перейти к следующей записи в форме и сохранить форму, ни в одной из таблиц ничего не изменилось.

enter image description here

Вот три таблицы и их отношения:

enter image description here

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

Может кто-нибудь посоветовать?

Ответы [ 2 ]

2 голосов
/ 25 апреля 2019

Вам нужно 3 формы:

  • Одна форма для студентов,
  • Одна форма для предметов
  • Одна форма для таблицы Student-Subject

Форма Student-Subject будет субформой в обеих других формах. Эта форма может иметь комбинированные поля для студента и предмета. Например, вот как может выглядеть редактирование ученика:

* +1012 *Student form with subject sub-form

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

Обратите внимание, что отображаются столбцы Subject и Student. В прошлом я использовал VBA, чтобы скрыть соответствующий столбец в зависимости от родительской формы:

Option Explicit

' note that this code goes in the Student-Subject form.
Private Sub Form_Load()

If Me.HasParent Then
    Me.cboStudentID.ColumnHidden = (Me.Parent.Name = "frmStudent")
    Me.cboSubjectID.ColumnHidden = (Me.Parent.Name = "frmSubject")
End If

End Sub
'''''''''''''''''''''''''''''''''''''''''''
Public Function HasParent() As Boolean
    On Error GoTo err_handle

    HasParent = Not Me.Parent Is Nothing
    Exit Function

err_handle:
    HasParent = False
    Exit Function

End Function


Таким образом, соответствующий столбец скрыт в зависимости от того, редактируете ли вы ученика (и столбец ученика будет скрыт) или редактируете тему (и столбец темы будет скрыт).

0 голосов
/ 25 апреля 2019

Как правило, у вас есть два разных взгляда на такое отношение multi-multi.Один из них - вы находитесь в поле зрения студента, а другой - если вы находитесь в поле зрения субъекта.В случае представления учащегося вы должны создать форму для редактирования таблицы учащегося и добавить подчиненную форму для редактирования таблицы подробных данных, т.е. StudentSubject.Эта подробная таблица должна быть синхронизирована с вашим StudentID из основной формы.Обычно это уже сделано мастером.Но учтите, что у вас есть только идентификаторы в таблице подробностей.Для отображения удобочитаемой информации вам необходимо изменить текстовые поля на поля со списком и привязать поля со списком к базовым таблицам.Поскольку в таблице сведений StudentSubject имеются только цифры, вы не можете вводить текст непосредственно в это поле.Если SubjectName не было зарегистрировано в таблице Subject, вам необходимо добавить новую запись, прежде чем вы сможете выбрать это.Чтобы динамически добавить новую текстовую запись, вы можете использовать событие «Нет в списке», чтобы обработать это.

...