Связанный список MS Access на форме таблицы - PullRequest
0 голосов
/ 01 августа 2011

В настоящее время у меня есть база данных MS Access 2003, которая имеет форму, в которой набор записей основан на таблице. В этой форме также есть поле со списком, у которого есть источник управления одного из полей в связанной таблице. Набор записей является результатом запроса, который извлекает все доступные «сервисы» из другой таблицы, а идентификатор выбранной «сервисной службы» сохраняется в связанной таблице формы. Combobox имеет три столбца с шириной столбца, определенной как 0 см, 1 см, 1 см, причем столбец 1 является столбцом привязки (ID).

это позволяет мне выбрать из раскрывающегося списка «сервис», а также ввести его, с идентификатором сервиса, хранящимся в таблице. Естественно, в этой форме может быть много строк, привязанных к строкам таблицы.

Это отлично работает и отлично. Однако теперь требуется, чтобы значения в этом раскрывающемся списке основывались на другом поле. Таким образом, вместо одного набора «сервисов» в раскрывающемся списке может быть несколько наборов «сервисов», которые будут отображаться на основе другого комбинированного списка.

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

Есть предложения?

Я попытался установить для свойства «limit to list» значение «No», однако этого нельзя сделать, когда первое поле (которое является связанным полем) в выпадающем списке имеет ширину 0 см. когда я устанавливаю его не равным 0 см, тогда отображаемое значение для этого поля со списком становится полем ID, а это не то, что я хочу.

Ответы [ 2 ]

1 голос
/ 01 августа 2011

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

Первое поле со списком (используется для отображения)

  • Вершина z-порядка (устанавливается через Bring to Front)
  • Менее ограниченный источник строк (т. Е. Не основанный на каком-либо другом значении текущего поля)
  • OnEnter: =[OtherCombo].[SetFocus]

Второе поле со списком (используется для редактирования)

  • Нижняя часть z-порядка (устанавливается с помощью Send to Back)
  • Ресурс ограничен на основе другого элемента управления (например, CategoryControl)
  • Rowsource обновляется для текущего события формы
  • Rowsource обновляется в событии CategoryControl AfterUpdate

Таким образом, первое поле со списком никогда не закрывается, поскольку RowSource менее ограничен. Однако второе поле со списком позволяет вам контролировать, какие значения выбирает пользователь, основываясь на каком-то другом поле.

Если вы установите для каждого поля со списком свой BackColor, становится очевидным, что происходит.

0 голосов
/ 02 августа 2011

Вместо использования события OnEnter отфильтрованного поля со списком, вам необходимо запросить его в следующих двух событиях:

  1. OnCurrent формы.

  2. событие AfterUpdate первого поля со списком.

Это часто задаваемые вопросы по Access (каскадные комбинированные списки), и на самом деле это не так сложно. Вам просто нужно тщательно продумать, что именно вы пытаетесь сделать - вы хотите изменять содержимое второго поля со списком только при изменении значения в первом поле со списком, и именно поэтому вы делаете это в двух событиях. выше, а не в OnEnter второго поля со списком (который срабатывает, когда нет причин делать это).

EDIT:

Я пропустил аспект непрерывной формы. На мой взгляд, это именно тот тип ситуации, когда непрерывная форма вообще не должна редактироваться. Вместо этого я бы рекомендовал сделать непрерывную форму статическим списком записей и связать другую подчиненную форму с LinkMaster / LinkChild с полем PK непрерывной формы и использовать эту другую форму (одну форму) для редактирования детали. Вы бы использовали непрерывную форму, чтобы выбрать запись, и одну форму, чтобы отобразить все детали и выполнить фактическое редактирование.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...