Не удалось установить поле со списком.Источник строк в непрерывной форме
-
16-09-2019 - |
Вопрос
У меня возникли проблемы с настройкой источника строки определенного поля со списком в моей форме (рассматривается как непрерывная форма, хотя, похоже, у меня также есть некоторые проблемы в режиме одиночной формы).
Поле со списком привязано к полю, называемому supplierID
, и предназначен для предоставления пользователю списка всех возможных поставщиков товара.Источником строки, который я использую для поля со списком, является:
SELECT DISTINCT Suppliers.name, Suppliers.supplierID
FROM Suppliers
INNER JOIN PartsSuppliers ON Suppliers.supplierID=PartsSuppliers.supplierID
WHERE PartsSuppliers.partID = partID;
Когда я просматриваю этот запрос в конструкторе запросов (с жестко заданным идентификатором участника), он работает нормально - он выбирает всех возможных поставщиков для выбранного товара и не показывает никаких других товаров.Но когда я смотрю на элементы в поле со списком, это показывает ВСЕ поставщики, присутствующие в PartsSuppliers
таблица (которая состоит всего из двух столбцов, сопоставляющих детали возможным поставщикам для них).
Я также пытался установить RowSource для поля со списком, используя какой-нибудь VBA в событии OnFocus (жестко закодировав значение PartID в), но, похоже, это никогда не меняет RowSource.Код VBA, который я использую, является:
Private Sub supplierID_GotFocus()
Dim query As String
query = "SELECT DISTINCT Suppliers.name, PartsSuppliers.supplierID "
query = query & "FROM Suppliers INNER JOIN PartsSuppliers ON Suppliers.supplierID = PartsSuppliers.supplierID "
query = query & "WHERE (((PartsSuppliers.partID)=" & partID & "));"
supplierDropDown.RowSource = query
supplierDropDown.Requery
End Sub
Я также попытался открыть этот запрос в наборе записей, а затем использовать установку этого набора записей в качестве набора записей в поле со списком, но это тоже не сработало.
Что я делаю не так, или есть какой-то другой способ, на который я должен обратить внимание, чтобы создать правильный выпадающий список?
Н.Б.Я видел Пользовательский источник строки для поля со списком в непрерывной форме в Access, но это общепринятое решение тоже не сработало для меня.
Решение
Используйте OnEnter
и OnExit
события, которые изменят ваш RowSource
.
Private Sub supplierID_Enter()
supplierDropDown.RowSource = _
"SELECT DISTINCT Suppliers.name, PartsSuppliers.supplierID " & _
"FROM Suppliers INNER JOIN PartsSuppliers ON Suppliers.supplierID = PartsSuppliers.supplierID " & _
"WHERE PartsSuppliers.partID = " & partID & ";"
End Sub
Private Sub supplierID_Exit()
supplierDropDown.RowSource = _
"SELECT DISTINCT Suppliers.name, PartsSuppliers.supplierID " & _
"FROM Suppliers INNER JOIN PartsSuppliers ON Suppliers.supplierID = PartsSuppliers.supplierID;"
End Sub
Другие советы
Я боролся с тем, как избежать "пробелов", оставленных в таблице данных, когда комбинированные элементы ограничены, и долгое время не мог найти ни одного прямого варианта ... до сих пор!
Оставляя все доступные параметры в поле со списком, но добавляя временное правило проверки, используя OnCurrent, вы отлично справляетесь с задачей.
Надеюсь, это предотвратит то, что кто-то будет биться головой о стол так долго, как я.