Первый ответ, который я собираюсь дать вам, - это тот, который, я думаю, наверняка дадут вам опытные программисты Access: Избегайте попыток упростить удаление нескольких записей в форме, которая отображает записи, используя любые сложные объединения или подзапросы. Другими словами, избегайте делать то, что вы пытаетесь сделать.
Мое второе предложение - попробовать что-то похожее на то, что вы уже пытаетесь сделать, запрос на удаление SQL. Я предполагаю, что вы, вероятно, используете оператор DoCmd.RunSQL. Я рекомендую вместо этого использовать следующий код:
CurrentDb.Excecute "DELETE * FROM tblMyTable WHERE ID = " & Me!ID, dbFailOnError
Me.Requery
Но я не думаю, что это полностью решает проблему получения сообщений об ошибках конфликта.
В качестве третьего предложения вы можете поместить кнопку «Удалить» в основную форму, которая запускает приведенный выше код. Вам нужно будет извлечь значение идентификатора из подчиненной формы.
Мое четвертое и последнее предложение похоже на мое третье предложение, которое я могу представить только в теории. Вы можете создать свое собственное контекстное меню и поместить в него пункт «Удалить», который запускает приведенный выше код. Я признаю, что есть несколько деталей об этом подходе, которые я не знаю, как сделать, например, показать это меню в правильное время и место и позволить пользователю выбирать и удалять несколько строк.