MS-Access несвязанный ComboBox в DataSheet? - PullRequest
1 голос
/ 27 августа 2010

В ms-access 2007 я пытаюсь создать форму для таблицы. эта таблица имеет внешние ключи от 2 родительских таблиц. поэтому я подумал, что сделаю эти поля поиском. но я не мог создать отдельный поиск для каждой родительской таблицы, потому что они составные ключи.

Я решил создать запрос, в котором для каждой из этих родительских таблиц и дочерней таблицы есть дополнительное поле для каждого составного ключа. это нормально работает с обычной формой, использующей несвязанный ComboBox ... но несвязанный ComboBox не работает в подчиненной форме DataSheet. когда я делаю изменения в ComboBox в коде Subform, они применяются ко всем другим ComboBoxам в том же столбце.

Мои вопросы:

  • есть ли способ изменить значения отдельного несвязанного ComboBox?

  • существует ли другой элемент управления, который я должен использовать, кроме ComboBox или DataSheet Subform?

  • каков нормальный обходной путь для этой ситуации?

Я не могу связать ComboBox, потому что поле из запроса вычисляется / как выражение, как я сказал.

Ответы [ 2 ]

1 голос
/ 28 октября 2011

Я сам столкнулся с формой этой проблемы, поэтому ради потомков:

Хотя в целом совет "Не используйте непрерывные формы / таблицы данных в этой ситуации" - лучший совет ... Можно обойти это.

Однако доступ не позволит вам обновить значение одного элемента управления в таблице данных.Вместо этого в этом случае можно использовать временную таблицу, которая при использовании в качестве источника записей может стать значениями этих элементов управления.Вам нужно будет заново заполнить таблицу и запрашивать элементы управления (также должен работать запрос всей формы) каждый раз, когда необходимо изменить расчет.Кроме того, если вы включите редактирование для элементов управления, вам нужно будет написать несколько VBA для каждого элемента управления для обработки события обновления (перед обновлением) и выполнить собственный запрос для обновления исходных таблиц, а не только временной таблицы.Раздражать, возможно, но эффективно.

Есть еще одна возможность, которая также может сработать, но я сам не пытался сделать что-то подобное.Источник строк в выпадающем списке может быть очень сложным, поэтому вполне вероятно, что вам вообще не нужно обновлять выпадающие списки с помощью VBA.Источник строк может зависеть от других элементов управления (например, другого комбинированного списка), используя синтаксис Me.Form! ControlName или Forms! FormName! ControlName, который позволит вам сформировать составной ключ.Конечно, вы также можете выбирать из запросов с источником строк.Что более интересно, запросы могут ссылаться на элементы управления в вашей форме, при условии, что форма открыта, и вы можете смело изменять ее с помощью VBA, если вам это необходимо.

Между этими двумя элементами следуетиметь возможность принудительного доступа, пинать и кричать, отображать любые данные, которые вы хотите, даже в таблице данных, и разрешать пользователю изменять эти данные (но только если вы этого хотите), и, используя событие BeforeUpdate, перетаскивать измененные данныевернуться к столу, откуда он взялся.

0 голосов
/ 27 августа 2010

Непрерывные формы и таблицы данных не подходят для редактирования в ситуациях, когда комбинированные поля необходимо изменить условно.Проблема заключается в том, что если вы используете событие OnCurrent для установки Rowsource поля со списком, он будет в порядке для этой строки, но затем будет скрывать сохраненные значения для других строк.

Решение состоит в том, чтобы никогда не использоватьНепрерывные формы / таблицы данных для редактирования данных, когда это так (на самом деле я почти никогда не использую их для редактирования).Вы можете создать две подчиненные формы: подчиненную форму непрерывной / таблицы данных, которая работает как список, и подчиненную форму сведений, отображающую одну запись.Сделайте подчиненную форму списка недоступной для редактирования, а подчиненную форму детали - редактируемой.Вы можете связать их с помощью свойства Link Child / Link Master элемента управления подчиненной формы детализации и установить его в качестве PK подчиненной формы списка.

Если подчиненной формой списка является Me! List и ваши данныеэто форма Me!, а поле PK - MyID, ваши свойства ссылки для подчиненной формы сведений будут:

  Master: Me!List.Form!MyID
  Child:  MyID

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

...