MS Access 2010: как избежать нежелательных результатов запросов? - PullRequest
1 голос
/ 03 ноября 2011

Я работаю над своей первой базой данных Access 2010 и столкнулся с проблемой при редактировании набора записей, возвращаемых из запроса. Эта отличная запись в блоге описывает несколько сценариев, которые могут привести к не редактируемым результатам запроса.Я считаю, что результаты моего запроса недоступны для редактирования, потому что мой запрос имеет декартово соединение.

Однако я не уверен, как этого избежать.Используются три таблицы:

  • эпизоды
    • Отдельные телевизионные эпизоды
    • Первичный ключ: "episode_id"
  • аридаты
    • Отдельные воздушные даты для данного эпизода
    • Первичный ключ: "airdate_id"
    • Относится к "эпизодам" по "airdate_episode_id"
  • startdates
    • Индивидуальные даты начала загрузки для данного эпизода
      • , т.е. когда данный эпизод будет доступен для загрузки
    • Первичный ключ: "startdate_id"
    • Относится к" эпизодам "от" startdate_episode_id "

Так что нет (и я думаю может быть нет)прямая связь между датами и стартом.Однако это заставляет запрос:

SELECT episodes.episode_id, episodes.episode_number, episodes.episode_title, airdates.airdate_region_id, airdates.airdate_date
FROM (episodes LEFT JOIN airdates ON episodes.episode_id = airdates.airdate_episode_id) LEFT JOIN startdates ON episodes.episode_id = startdates.startdate_episode_id;

возвращать набор записей, который нельзя редактировать.Мне нужно иметь возможность видеть название и номер эпизода вместе с эфирной датой, чтобы ввести начальную дату (эпизоды нельзя сделать доступными для скачивания до того, как они выйдут в эфир).По сути, с этой точки зрения мне нужно только иметь возможность редактировать "startdates.stardate_date".

Заранее благодарен за любые предложения ... скриншот рассматриваемой взаимосвязи можно увидеть здесь .

1 Ответ

2 голосов
/ 03 ноября 2011

Создать этот запрос:

SELECT
    episodes.episode_id,
    episodes.episode_number,
    episodes.episode_title,
    airdates.airdate_region_id,
    airdates.airdate_date
FROM
    episodes LEFT JOIN airdates
    ON episodes.episode_id = airdates.airdate_episode_id;

Используйте его как источник записей для новой формы. Затем создайте другую форму, которая использует запрос только таблицы startdates в качестве источника записи.

Добавьте вторую форму как подчиненную форму к первой форме. На листе свойств для подчиненной формы control укажите главное поле ссылки episode_id и дочернее поле ссылки startdate_episode_id.

Если вы добились успеха, подчиненная форма отобразит строки начальных дат, где startdate_episode_id соответствует episode_id текущей записи главной формы. И если вы добавите новую строку в подчиненную форму, ее startdate_episode_id будет «наследовать» episode_id от основной формы.

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

...