Как автоматически заполнить поле ввода при вводе пользователем? - PullRequest
0 голосов
/ 16 июня 2019

Мой комбинированный список с именем districtCombo связан с полем с именем carDistrict. Чтобы помочь мне сэкономить время при обновлении поля CarDistrict, я хочу иметь возможность автоматически заполнять поле со списком при вводе пользователем

Я думал об использовании оператора select в событии districtCombo_Change, но я не получаю ничего, даже сообщения об ошибке.

Есть ли способ обойти это? Или есть предложения лучше?

Private Sub districtCombo_Change()
    Dim Task As String
    Task = "SELECT carDistrict FROM tblCars ORDER BY tblCars.districtCombo"
    Me.districtCombo.RowSource = Task
End Sub()

Думаю, моя вторая попытка приблизить меня Я полностью отказался от события Change и сконструировал событие Form_Load следующим образом:

Private Sub Form_Load()

Me.RecordSource = "tblCars"
districtCombo.ControlSource = "carDistrict"
districtCombo.RowSourceType = "Table/Query"
districtCombo.RowSource = "SELECT carDistrict FROM tblCars"

End Sub

проблема в том, что в выпадающем списке отображаются все значения, включая повторяющиеся значения и пустые поля. Есть ли способ отфильтровать элементы списка, чтобы отображался только один элемент, состоящий из одной строки?

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

Private Sub Form_Load()

Me.RecordSource = "tblCars"
districtCombo.ControlSource = "carDistrict"
districtCombo.RowSourceType = "Table/Query"
districtCombo.RowSource = "SELECT distinct carDistrict FROM tblCars WHERE 
carDistrict Is Not null"

End Sub

Private Sub districtCombo_NotInList(NewData As String, Response As Integer)
Dim rs As DAO.Recordset

 Set rs = CurrentDb.OpenRecordset("tblCars")
 rs.AddNew
 rs!carDistrict = NewData
 rs.Update
 End Sub

 Private Sub districtCombo_AfterUpdate()
 Me.Requery
 End Sub

Я получаю сообщение об ошибке в части rs.Update.

И, наконец, вот что я искал:

'Set the Limit to list property of the combobox to No

Private Sub Form_Load()
Me.RecordSource = "tblCars"
districtCombo.ControlSource = "carDistrict"
districtCombo.RowSourceType = "Table/Query"
districtCombo.RowSource = "SELECT distinct carDistrict FROM tblCars WHERE 
carDistrict Is Not null"
End Sub

Private Sub districtCombo_AfterUpdate()
Me.Requery
End Sub

1 Ответ

0 голосов
/ 16 июня 2019

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

Если список возможных значений не хранится в отдельной таблице (как если бы вы следовали правилам нормализация базы данных ), тогда вы можете заполнить комбинированный список всеми возможными значениями, указав Источник строки как что-то вроде:

select distinct cardistrict from tblcars where cardistrict is not null

Вам также необходимо обновить исходный набор данных строки после добавления новых значений.

Одним из способов достижения этого является вызов метода Requery элемента управления combobox в обработчике события для события AfterUpdate:

Private Sub districtCombo_AfterUpdate()
    districtCombo.Requery
End Sub

Обратите внимание, что такие свойства, как формаИсточник записи и источник управления комбинированного списка, источник строки и тип источника строки не должны быть заполнены в событии Load формы, но могут быть настроены в форме формы.

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