Как использовать Dlookup для нескольких критериев для создания динамического поля со списком

У меня есть два Comboboxes от: txtKategorie и txtTyp. Значения для поля со списком frist (txtKategorie) исправлены! Я хочу, чтобы значения второго Combobox (txtTyp) изменялись в соответствии с тем, что пользователь выбирает в первом. Если пользователь выбирает "Регистратор данных", второе поле со списком должно содержать только "Базовый уровень Classic" и "Базовый уровень плюс", как видно на изображении. То же самое и с "Акселерометром".

Я поместил свой код в событие AfterUpdate первого поля со списком:

 If txtKategorie.Value = "Datalogger" And txtTyp.ListCount = 0 Then   
    i = 1
    Do While txtTyp.ListCount < DCount("ID", "tblNomenklatur", "[Kat] = 'K'")
    txtTyp.AddItem DLookup("[Typ]", "tblNomenklatur", "[ID] =" & i And "[Kat] = 'K'")
    'And "[Kat] = 'K'"
    i = i + 1
    Loop

Когда форма открывается, только первое поле со списком "txtKategorie" имеет значения. Когда пользователь выбирает Регистратор данных, код проверяет, сколько записей в таблице имеют [Kat] = "K", чтобы определить, как долго будет выполняться инструкция Do While. Затем "txtTyp.AddItem" -Statement должен добавить "Base Layer Classic" и "Base Layer Plus" в поле со списком "txtTyp". Но, к сожалению, Кодекс не работает. Есть проблема с Dlookup-Statement, содержащим два критерия. Если я удалю один из двух критериев, Код будет работать, но явно выдаст неверные результаты для второго поля со списком. Если я оставлю это так, второе поле со списком останется пустым. Кто-нибудь знает, что я делаю не так?

1 ответ

Решение

Вы можете легко сделать это с помощью кода ниже. Измените имя таблицы на свое имя.

Private Sub txtKategorie_AfterUpdate()
    Me.txtTyp.RowSource = "SELECT DISTINCT Table1.Typ FROM Table1 WHERE Table1.Kategorie='" & Me.txtKategorie & "'"
    Me.txtTyp.Requery
End Sub

Или вы можете сделать это графически из построителя запросов источника строк. Ниже приведены шаги.

  1. Поле со списком txtKategorieисправлено. Отлично!
  2. Для второго поля со списком txtTyp выполните следующие шаги.
  3. Выбрать поле со списком txtTyp. В окнах свойств выберитеRow Source затем нажмите на построитель запросов ...маленькие три точки. Смотрите скриншот.
  4. В окне конструктора запросов создайте запрос из таблицы данных, например снимок экрана, и установите критерии для Kategorie столбец [Forms]![Form1]![txtKategorie] Сохраните и закройте окно составителя запросов.

Теперь о Combobox txtKategorie в After Update событие напишите ниже строку для запроса txtTyp. Вы сделали!

Private Sub txtKategorie_AfterUpdate()
    Me.txtTyp.Requery
End Sub
Другие вопросы по тегам