Получение значения, если известен номер поля и записи? - PullRequest
0 голосов
/ 12 апреля 2020

Добрый вечер,

Я работаю над комбинированной формой поиска, которая предназначена для поиска информации по критериям. Форма имеет поле со списком, содержащее значения полей и текстовое поле рядом с ним. Выбор значения поля в поле со списком заполнит текстовое поле рядом с ним соответствующей информацией для этой записи, вся соответствующая информация содержится в PetTable.

Мне удалось получить поле со списком чтобы отобразить поля из PetTable, установив для rowSource значение PetTable, а для sourceType - поле списка ... однако я попал в тупик.

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

Мой следующий я думал сделать текстовое поле Control source "= PetTable.PetComboBox", я думал, что PetTable ссылается на таблицу с моей информацией, и "PetComboBox" становится полем, которое необходимо получить. Это тоже не сработало и выдало ошибку #Name "

. То, что должно происходить: в комбинированном окне, если я выбрал [Pet Name], я бы надеялся, что текстовое поле рядом с ним станет" Fido ", но вместо этого оно также становится [Имя питомца].

Любая и вся помощь будет оценена!

Спасибо

Желаемый эффект

1 Ответ

0 голосов
/ 12 апреля 2020

Вам нужно изменить тип источника строки поля со списком на «Таблица / Запрос». Затем в «источнике строк» ​​нажмите «...», чтобы открыть Query Builder. Выберите таблицу, которую вы хотите. Добавьте столбцы, которые вы хотите. Я бы предложил первичный ключ таблицы PetID, а затем любые другие поля - в вашем случае хотя бы PetName. Вы также можете отсортировать по PetName, чтобы пользователю было легче пролистывать. Закройте Query Builder и сохраните изменения. Измените значение ColumnCount поля со списком на 2 и установите для ширины столбца значение «0 см; 6 см» (если ширина первого столбца равна 0, это означает, что он не отображается для пользователя).

Теперь переместите TextBox и установите для параметра «Источник управления» значение:

=[Combo0].Column(1)

Обратите внимание, что столбцы в поле со списком имеют индекс 0, поэтому первый столбец - это столбец 0, второй (в вашем случае, содержащий PetName) это столбец 1.

Поскольку вы на самом деле хотите отображать имена полей, а не данные в поле со списком, вам нужно будет установить RowSourceType как «Список полей», а затем выбрать имя таблицы как RowSource.

Затем вам понадобится небольшой кусочек VBA для поиска значения этого поля в таблице для текущей записи:

Sub sListFieldData()
    If Not IsNull(Me!Combo0) Then
        Me!Text2 = DLookup(Me!Combo0, "tblPet", "PetID=" & Me!PetID)
    Else
        Me!Text2 = ""
    End If
End Sub

И затем вам нужно будет вызвать эта процедура в событии AfterUpdate поля со списком (для отслеживания, когда оно было изменено пользователем), а также в событии Current формы (для отслеживания, когда пользователь перемещается между записями):

Private Sub Combo0_AfterUpdate()
    Call sListFieldData
End Sub

Private Sub Form_Current()
    Call sListFieldData
End Sub

С уважением,

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