MS-Access несвязанный ComboBox в DataSheet?

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

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

Мои вопросы:

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

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

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

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

2 ответа

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

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

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

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

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

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

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

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

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

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

Другие вопросы по тегам