0

Access 2010 формы: прямой ввод внешнего ключа в текстовое поле


В форме, которую я создаю для базы данных 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 создать новую строку в ссылочной таблице? Решит ли приведенный выше исходный код мою проблему, если я смогу заставить ее работать?

Мне кажется, что ваш источник записи для формы указывает на таблицу A, когда она должна использовать Таблицу B (23 июля '12 в 20:00)

Спасибо за предложение. Я просто пошел, чтобы проверить, но источник записи формы правильно установлен в отношении B. (24 июля '12 в 13:02)

В какую таблицу вы пытаетесь добавить данные? Это таблица A или таблица B? (24 июля '12 в 19:11)

Таблица B. Я хотел бы, чтобы новый кортеж в B ссылался на существующий кортеж в A через внешний ключ. Как указано в вопросе, это работает, если я ввожу внешний ключ непосредственно в табличном представлении B, но не если я введу его в то же поле, используя текстовое поле на форме. (25 июля '12 в 13:57)

Ответов: 1

1

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

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

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

Вариант 1 - хороший обходной путь. Я все еще думаю, что должно быть возможно заставить текстовое поле формы вести себя как ячейка в представлении электронной таблицы, но я могу использовать этот метод, чтобы приспособить конечных пользователей. Спасибо! (16 октября '12 в 4:07)

Дополнить ответ

Server-Help.Ru - 2019. The website content is licensed CC BY NC SA 4.0. <|> Политика Конфиденциальности