В форме, которую я создаю для базы данных MS Access 2010, одно из полей представляет внешний ключ. Мне бы хотелось, чтобы это поле отображалось как текстовое поле, а не как поле со списком или списком, как обычно для внешних ключей (основная причина в том, что списки станут слишком длинными и неудобными для использования, и я бы предпочел иметь пользователи вводят ключ напрямую). Тем не менее, я не могу заставить его работать, так что я могу напрямую ввести внешний ключ в этом текстовом поле. Вместо того, чтобы брать внешний ключ, который я ввел, и следуя ссылке на существующий кортеж в другом отношении, Access, кажется, всегда пытается создать новый кортеж в другом отношении, что, конечно, не удается, так как кортеж с идентичным ключом уже существует ( то есть тот, на который я пытался ссылаться).

Проще говоря, проблема, с которой я сталкиваюсь, такова: у меня есть строка с идентификатором 100 в таблице А. Я хочу создать новую строку в таблице B с внешним ключом 100, используемым для ссылки на эту строку в таблице A. Соотношение таблиц правильно установлено в Access. Если я редактирую таблицу B в виде электронной таблицы, я могу напрямую ввести внешний ключ 100, и все работает так, как я хочу. Однако, если я делаю то же самое в форме, Access получает жалобу на дубликат ключа, потому что вместо простого сохранения внешнего ключа 100 в таблице B он также пытается создать совершенно новую строку с дублирующимся идентификатором 100 в таблице. А. Надеюсь, это более или менее понятно.

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

=DlookUp("[ID]", "[TableA]", "[ID]=" & Forms![Form2]![txtID1])

но я только когда-либо получаю синтаксическую ошибку из этого. Кроме того, файлы справки Access охватывают только функцию DlookUp до версии 2007 - возможно ли, что эта функция больше не доступна в Access 2010?

Как я могу позволить пользователям вводить внешний ключ непосредственно в текстовое поле на форме, не пытаясь при этом Access создать новую строку в ссылочной таблице? Решит ли приведенный выше исходный код мою проблему, если я смогу заставить ее работать?

1 ответ1

1

Хорошо. Я понимаю, что вы пытаетесь сделать сейчас. В зависимости от того, что вы хотите сделать, вам доступны два варианта.

Вариант 1: я думаю, что это более элегантное решение. Создайте запрос, объединяющий две таблицы. Если разрешено, новый запрос будет редактируемым, и вы сможете извлечь информацию, которую вы ищете в таблице A, и поместить прямо в текстовое поле. Посетите этот веб-сайт, чтобы определить, почему ваш новый запрос может быть только для чтения. http://allenbrowne.com/ser-61.html

Вариант 2. Продолжайте использовать поле со списком в форме и создайте изображение, которое будет маскировать стрелку вниз в поле со списком.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .