как объединить выпадающий список с dlookup в Access

#ms-access #combobox #multiple-columns #dlookup #filtered-lookup

#ms-access #выпадающий список #несколько столбцов #dlookup #фильтрованный поиск

Вопрос:

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

Проблема: dlookup ищет идентификатор пользователя вместо элемента. Я ДУМАЮ, это потому, что связанный столбец

Структура: Шаг 1) Пользователь выбирает свое имя из поля со списком # 1 Шаг 2) Поле со списком # 2 будет отображать только местоположение, назначенное пользователю — пользователь выбирает местоположение. Шаг 3) В поле со списком # 3 будут отображаться только элементы, хранящиеся в этом месте — пользователь выбирает элемент

 Code for combo box #3
Private Sub Item_GotFocus()
Dim user_filter, location_filter As String
user_filter = Me.Count_By
location_filter = Me.Location
With Me.Item
    .RowSource = "SELECT WeeklyCountOptions.User, WeeklyCountOptions.Location, WeeklyCountOptions.Item" _
                    amp; " FROM WeeklyCountOptions" _
                    amp; " WHERE (((WeeklyCountOptions.User)='" amp; user_filter amp; "') AND ((WeeklyCountOptions.Location)='" amp; location_filter amp; "'));"
    ' by having here the property sheet is ignore
    .BoundColumn = 1
    .ColumnCount = 3
    .ColumnWidths = "0in.;0in.;1in."
End With
End Sub
 

Код для dlookup

 Private Sub Whole_Count_GotFocus()
Dim Item_Filter As String
DoCmd.OpenTable "item_Detail"
Item_Filter = "[ItemId]=" amp; "'" amp; Me.Item.Value amp; "'"
MsgBox (Item_Filter) ' just for testing need to delete
Me.Units_in_UOM = DLookup("[QPC]", "[Item_Detail]", Item_Filter)
End Sub
 

Что я могу сделать, чтобы исправить это?

Комментарии:

1. Отредактируйте вопрос, чтобы показать SQL combo 3 RowSource. Я предполагаю, что имя combo 3 — это Item . Открытие таблицы не имеет смысла. Нет необходимости добавлять к каждому имени поля префикс tablename в инструкции SQL. Лучше выполнять поиск / фильтр с идентификатором, а не с текстом, таким как имя пользователя или название местоположения.

2. SQL для combo 3 уже указан.

3. О, извините, было поздно, поздно, когда я посмотрел на это.

4. Поля идентификатора имеют текстовый тип? Не использовать autonumber в качестве первичного ключа? SQL не показывает включение поля ItemId, только Item, но код ссылается на поле ItemId.

Ответ №1:

Да, combobox имеет значение для пользователя. На самом деле не нужно включать поля User и Location в качестве столбцов в этой комбинации. Однако, если вы действительно хотите, рассмотрите варианты:

  1. измените порядок полей в запросе, чтобы элемент был первым столбцом
  2. установите третий столбец в качестве связанного столбца
  3. ссылка на третий столбец по его индексу, индекс основан на нуле: Me.Item.Column(2)

Предполагая, что числовой идентификатор автономера задан в качестве первичного ключа и сохранен как внешний ключ (что и должно быть так), все 3 выпадающих списка должны иметь RowSource, который включает ID и описательное поле и использовать ID для фильтрации.

Если WeeklyCountOptions — это таблица соединений, в которой в качестве внешних ключей сохраняются только значения идентификаторов, а не описательная информация, combobox RowSource, возможно, должен быть SQL, который объединяет WeeklyCountOptions с ItemDetail, чтобы можно было получить описательную информацию. Все зависит от структуры таблиц и способа сохранения данных.