Создание отношений в Microsoft Access - PullRequest
0 голосов
/ 08 ноября 2011

Я создаю базу данных для отслеживания участия моих учеников в занятиях.Это то, что я настроил до сих пор.Я работаю в Access 2007.

Основная таблица участника - имя, контактная информация, зачисленный класс, зачисленный семестр.Зарегистрированный класс (класс A, класс B, класс C) и зарегистрированный семестр (Semester 1, Semester 2) определены в таблицах.Первичный ключ - это номер автоинкремента, но все учащиеся получают идентификационный номер школы (ParticipantID).

Query1 извлекает имя и адрес для студентов, зачисленных в класс A, семестр 2 (SELECT name, address FROM ParticipantMaster WHERE EnrClass = "Class A" and EnrSem = "Semester 2").Запрос работает.

DailySessionLog - это таблица для представления каждого ежедневного класса.Включает поля для даты, имени преподавателя (проверка из списка), темы обсуждения (проверка из списка).

Теперь я хочу связать DailySessionLog с Query1 - позволяя мне каждый день проверять, был ли студент там для НетЧастичный, Половинный или Полный сеанс в этот день.У меня проблемы с их связью и созданием подчиненной формы.Любая помощь?

Я пытался иметь поле ParticipantID в DailySessionLog, которое я связал с ParticipantID в Query1.Он не распознает, если это отношения один: один или много.Если я продолжу и создаю подчиненную форму с помощью мастера доступа, он обрабатывает данные Участника как «высшую» форму, а данные DailySessionLog - как «подчиненную» форму.Я хочу, чтобы все было наоборот.

Спасибо за помощь!

Ответы [ 2 ]

1 голос
/ 08 ноября 2011

Чтобы создать отношение «один к одному» или «один ко многим», необходимо связать DailySessionLog с ParticipantMaster, а не с Query1.Затем вы должны создать запрос для отображения ежедневных журналов сеансов данного класса за данный семестр.Пример:

SELECT {field list} FROM ParticipantMaster INNER JOIN DailySessionLog ON {join expression} WHERE ParticipantMaster.EnrClass = "Class A" AND ParticipantMaster.EnrSem = "Semester 2"

Однако было бы лучше использовать переменные параметры, а не жестко закодированные строки.Пример:

SELECT {field list} FROM ParticipantMaster INNER JOIN DailySessionLog ON {join expression} WHERE ParticipantMaster.EnrClass = [ClassName] AND ParticipantMaster.EnrSem = [SemesterName]

Или, чтобы использовать значение из элемента управления в открытой форме:

SELECT {field list} FROM ParticipantMaster INNER JOIN DailySessionLog ON {join expression} WHERE ParticipantMaster.EnrClass = [Forms]![FormName]![ClassControlName] AND ParticipantMaster.EnrSem = [Forms]![FormName]![SemesterControlName]

ПРАВКА

На самом деле, вы хотите использовать эту идею И xQbert, поэтому, для краткости с такими именами таблиц:

Participants (a.k.a. ParticipantMaster)
Sessions (a.k.a DailySessionLog)
ParticipantSession (a.k.a. Participant_daily_session_log)

первый запрос будет выглядеть примерно так:*

SELECT {field list}
FROM
    Participants
    INNER JOIN ParticipantSession ON Participant.ID = ParticipantSession.ParticipantID
    INNER JOIN Sessions ON ParticipantSession.SessionID = Session.ID
1 голос
/ 08 ноября 2011

Где вы намерены в базе данных «хранить» участие?

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

Подумайте о таблице dailysessionlog, в которой вы не хотите, чтобы имя, тема и дата преподавателя были указаны для КАЖДОГО студента, не так ли?

Итак, у вас может быть много учеников, а в классе может быть много учеников. Это означает, что у вас есть много ко многим, которые необходимо решить, прежде чем доступ сможет выяснить, что вы хотите сделать.

Подумайте о следующих таблицах: Участник (ParticipantID) Класс (ClassID) Сессия (SessionID, ClassID) ClassParticipants (ClassId, ParticipantID, Семестр, год Участники сессии (идентификатор сессии, идентификатор класса, идентификатор участника)

...