Заполнение текстовых полей из таблицы, отфильтрованной 3 полями со списком - PullRequest
1 голос
/ 03 августа 2020

У меня есть таблица tblUniqueRec с 14 полями. Я использую форму frmUniqueRec для отображения этих полей в текстовых полях и использую 3 поля со списком для фильтрации записей. 3 из 14 полей будут использоваться в качестве критерия фильтрации. См. Пример в этой таблице:

Пример таблицы

Value1, Value2, Value3 - это 3 значения, которые будут в 3 отдельных полях со списком, и в зависимости от того, какое из них выбрано, будет отображаться поле Field4-Field14, которое соответствует всем 3 критериям.

Я пробовал следующее:

Заполните каждое текстовое поле, используя запрос в VBA, установив источник управления для этого текстового поля запросом:

1Val = Nz(Me.Value1.Value, "")
2Val = Nz(Me.Value2.Value, "")
3Val = Nz(Me.Value3.Value, "")

qryZone = "SELECT Value1FROM tblUniqueRec WHERE Value1= '" & 1Val & "' and Value2= '" & 2Val & "' and Value3 = '" & 3Val & "'"""
Me.textbox1.ControlSource = qryZone

Я пробовал сделать это в свойстве лист, а также VBA, но ни один из них не работал.

Я также попытался установить значение по умолчанию в листе свойств для каждого текстового поля на DLookUp, но это тоже не сработало:

=DLookUp([Field1],[tblUniqueRec],[Value1]=[1Val] And [Value2]=[2Val] And [Value3]=[3Val])

Я также пробовал DLookUp, где я жестко закодировал значения, и это не сработало.

Как я могу сделать это правильно?

1 Ответ

1 голос
/ 07 августа 2020

Обычный способ сделать это - отфильтровать форму с помощью несвязанных полей со списком:

enter image description here form before filter:

enter image description here

form after filtering:

введите описание изображения здесь

Первое примечание: обычно у вас есть таблица типа Value1, заполненная всеми значениями, которые Value1 может принимать. Обычно источник строк combobox создается с использованием таблицы типов, включая индекс таблицы типов, но здесь у нас этого нет. Вместо этого выберите только Value1 и убедитесь, что вы нашли свойство «только уникальные значения» в запросе rowource, и установите для него значение yes. Как только поля со списком будут готовы, подключите их к форме с помощью события afterupdate. используйте один и тот же код для каждого события или абстрагируйте его до функции.

Private Sub cmbValue1_AfterUpdate()
'Form_frmUniqueRecords.Filter = cmbValue1.Value
'note the single quotes around values ( '  ') this is an unfortunate necessity when testing strings
If Not IsNull(cmbValue1) And Not IsNull(cmbValue2) And Not IsNull(cmbValue3) Then
Me.Filter = "Value1 = '" & cmbValue1.Value & "' AND Value2 = '" & cmbValue2.Value & "' AND Value3 = '" & cmbValue3.Value & "'"
Me.FilterOn = True
Else
'decide how to handle default values and empty boxes to figure out what to do else
End If
End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...