Не удалось установить поле со списком.Источник строк в непрерывной форме

StackOverflow https://stackoverflow.com/questions/1678236

  •  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, вы отлично справляетесь с задачей.

Надеюсь, это предотвратит то, что кто-то будет биться головой о стол так долго, как я.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top