Отношение «многие ко многим» в родительской / дочерней форме ограничивает ввод данных - PullRequest
0 голосов
/ 20 марта 2012

У меня есть клиент Access 2003, который без проблем использовал сервер Access.Недавно я переключил бэкэнд Access на использование SQL Server 2005, но пока не смог разобраться с этой последней проблемой - любая помощь приветствуется.

У меня есть две таблицы во многихмногие отношения:

tblMembership <--> tblLinkPersonMembership <--> tblPerson

Полями первичного ключа являются membersId и personId, а таблица ссылок содержит и то, и ничего больше.

Приложение Access имеет форму, которая использует tblMembership в качестве источника записей.У него есть дочерняя форма, источник записи которой

SELECT * 
FROM tblPerson INNER JOIN tblLinkPersonMembership 
    ON tblPerson.personId=tblLinkPersonMembership.personId;

. Это прекрасно работало при использовании базы данных Access (2003) в качестве бэкэнда.Теперь, когда бэкэнд - SQL Server 2005, я могу ввести записи 2 человек в подчиненной форме, но когда запись третьего лица для данного членства пытается сохранить, я получаю следующую ошибку:

The Microsoft Jet database engine cannot find a record in the table 
'tblPerson' with key matching field(s) 'tblLinkPersonMembership.personId'.

Если язакройте форму, снова откройте ее и вернитесь к членству (с которым сейчас связано 2 человека), я могу ввести еще 2 человек (лица № 3 и № 4), но если я попытаюсь ввести 5-е лицо,Я получаю ту же ошибку.Я могу закрыть форму, снова открыть и добавить еще 2, до тошноты.

Я немного озадачен, и то, что я провел на сегодняшний день, ничего не нашло.Любая помощь?

1 Ответ

0 голосов
/ 21 марта 2012

Я бы начал с того, что форма Access и SQL открыты бок о бок. Поскольку вы можете ввести 2 (?) Записи без проблем (?), Я бы ввел одну запись и посмотрел на базу данных (три таблицы), чтобы увидеть, какие данные туда попадают. Затем для второй записи. Основное внимание будет уделено ФК / ФК. Кроме того, я бы поместил ВСЕ ключевые столбцы в форму доступа (PK, FK), чтобы увидеть, как они заполняются.

Тогда родитель / ребенок формирует отношения. С вашим " SELECT *" вы получаете ДВА колонки с персоналом. Пока вы используете tableName.personId , все будет в порядке, но это также стоит проверить. Например. убедившись, что вы не редактируете PK из tblPerson , в то время как вы хотите обновить FK в tblLinkPersonMembership .

...