MS Access получает значения из ListBox - PullRequest
0 голосов
/ 19 марта 2019

ОБНОВЛЕНИЕ: 20.03.2009 После подпункта (ниже) я переименовал ListBox. ItemsSelected свойство РАБОТАЕТ. Значение все еще возвращает NULL в коде


Я впервые работаю со списками с множественным выбором в Access. У меня есть форма отчета с некоторыми выпадающими списками, флажками и списком. Список содержит почти 70 элементов - назовем их «Города».

ListBox допускает несколько вариантов выбора. В VBA я беру каждый из параметров - из других элементов управления формы, чтобы создать гигантское условие WHERE, которое подает мой отчет.

Проблема в том, что Access не читает значения, выбранные в ListBox. Когда я пересекаю эту строку кода, значение равно NULL.

Пока:

Dim s As Variant
s = Me.City.Value & "" 

Это то, где я знаю, что ошибся, но, не имея дело с множественным выбором ListBox прежде, я не знаю синтаксис для чтения значений.

Далее: проверить, выбраны ли значения в списке "s":

If s <> "" Then

Проверьте другие параметры в текущем состоянии WHERE. ЕСЛИ не существует, ТО

If c.WhereCondition = "" Then
c.WhereCondition =

Установите условие WHERE, сравнивая значения списка (которые являются строками) со значениями «да / нет» эквивалентных полей в исходной таблице.

Мне нужно сравнить значения Списка с 70 полями в таблице - чтобы извлечь те записи, которые совпадают.

Нет, здесь нет 1 поля, скажем, Cities, с 70 возможными значениями. Вместо этого у каждого из 70 возможных городов есть свое собственное поле Да / Нет. Я унаследовал эту БД. Вот как это было построено.

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

c.WhereCondition = "( City1 = -1 OR City2 = -1 OR City3 = -1 OR .....)

`ЕСЛИ в текущем предложении WHERE есть параметры, ТО сравнивать значения в таблице List to Source и ИЛИ ПРИЛОЖИТЬ результат в условие WHERE с помощью« И »

ELSE
       c.WhereCondition = c.WhereCondition & " AND (City1 = -1 OR City2 = -1, OR ...)

    End If
    End If

Я надеюсь, что смог объяснить это достаточно хорошо. Первой проблемой является чтение значений. Я не буду знать, правильна ли моя попытка сравнения без этого.

1 Ответ

0 голосов
/ 20 марта 2019

ЭТО потребовало МНОГО крошек, чтобы доставить меня сюда!

Решение:

Dim s As Variant
Dim i As Integer
Dim ctl As Control
Set ctl = Me.Counties

If ctl.ItemsSelected.Count <> 0 Then
    For Each s In ctl.ItemsSelected
            t.WhereCondition = ctl.ItemData(s) & " = -1"
                                Next s
    End If
  1. Мне пришлось переименовать контроль из графства в графства.Похоже, что первое было частью отчета, и все испортило.Я сделал это после первоначального удаления и повторного добавления элемента управления.

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

  3. Мне нужно сравнить 70 полей да / нет с данными, вытаскивая только те, которыеверните Истину.Следовательно -1.

Это компилируется.Это работает.Скрестим пальцы за точность данных.

Спасибо!

...