Почему моя форма доступа изменяет мои поля, когда я ее сохраняю? - PullRequest
1 голос
/ 07 июля 2019

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

Таблица 1 - Команды:

  • Team_ID (автономный номер, первичный ключ)
  • Имя (краткий текст)

Таблица 2 - Результаты:

  • Game_ID (автономный номер, первичный ключ)
  • Home_Team_ID (внешний ключ из таблицы 1)
  • Away_Team_ID (внешний ключ из таблицы 1)
  • Winning_Team_ID (внешний ключ из таблицы 1)

Я сделал форму, которая отображает Home / Away / Winning_Team_ID из Таблицы 2, однако я действительно изо всех сил пытаюсь отобразить Названия Команды (из ссылки на Таблицу 1).

В источнике записей для формы я связал Таблицу 2 с тремя копиями Таблицы 1, а затем связал Первичный ключ из трех Таблиц 1 с Внешним ключом (Home / Away / Winning_Team_ID) с Таблицей 2 как видно ниже.

Record Source

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

Проблема заключается в том, что, когда я пытаюсь «Добавить существующие поля» в представление «Дизайн» формы и затем сохранить его, все 3 («Дом», «В гостях» и «Выигрыш») показывают одинаковое значение («Домашнее значение»).

Прежде чем я сохраню - именно то, что мне нужно: Before Save

После сохранения - поле справа изменилось: After Save

(Примечание. Разница между двумя изображениями выше - это изменение с "Teams_1.Name" справа на "Teams.Name")

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

1 Ответ

1 голос
/ 07 июля 2019

Причина, по которой возникает эта проблема, заключается в том, что три поля имеют идентичные имена полей в коде SQL, составляющем источник записи для формы (хотя квалификаторы таблицы различаются), и поэтому, когда MS Access проверяет источник управления каждого элемента управления на форма игнорирует спецификатор таблицы и назначает первое поле с соответствующим именем поля в источнике записи.

Существует два способа решения этой проблемы:

  1. Присвойте псевдоним двум другим полям Name в источнике записи для формы, например ::

    select 
        Teams.Name as Home_Team, 
        Teams_1.Name as Away_Team, 
        Teams_2.Name as Winning_Team 
    from 
        (
            (
                Results left join Teams on
                Results.Home_Team_ID = Teams.Team_ID
            )
            left join Teams as Teams_1 on 
            Results.Away_Team_ID = Teams_1.Team_ID
        )
        left join Teams as Teams_2 on
        Results.Winning_Team_ID = Teams_2.Team_ID
    
  2. Создайте сохраненный запрос, содержащий данные, которые вы хотите отобразить в форме, а затем укажите сохраненный запрос в качестве источника записи для формы - использование этого метода избавляет от необходимости назначать псевдонимы для полей.

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

...