Pergunta

Estou tendo problemas para definir a fonte de linha de uma determinada caixa de combinação no meu formulário (visto como uma forma contínua, embora eu também parecem ter alguns problemas no modo de formulário único).

A caixa de combinação está vinculado a um campo chamado supplierID, e destina-se a apresentar ao usuário uma lista de todos os possíveis fornecedores para um item. A linha de código que estou usando para caixa de combinação é:

SELECT DISTINCT Suppliers.name, Suppliers.supplierID
FROM Suppliers
INNER JOIN PartsSuppliers ON Suppliers.supplierID=PartsSuppliers.supplierID 
WHERE PartsSuppliers.partID = partID;

Quando eu ver esta consulta no designer de consulta (com um PartID hard-coded), ele funciona bem - ele seleciona todos os possíveis fornecedores para o item escolhido, e não mostra quaisquer outros itens. Mas quando eu olhar para os itens na caixa de combinação, mostra todas os fornecedores presentes na tabela de PartsSuppliers (que tem apenas duas colunas, mapeando as peças para os possíveis fornecedores para eles).

Eu também tentei definir RowSource da caixa de combinação usando algum VBA no evento OnFocus (codificar o valor PartID in), mas nunca parece mudar a OrigemDaLinha. O código VBA que estou usando é:

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

Eu também tentei abertura que consulta em um conjunto de registros e, em seguida, usando configuração que registros como RecordSet da caixa de combinação, mas isso não quer trabalhar.

O que estou fazendo de errado, ou há alguma outra maneira que eu deveria estar olhando para fazer o drop-down correto?

NB. Eu vi para a caixa de combinação em forma contínua no Access , mas que a solução aceita não funcionou para mim.

Foi útil?

Solução

Utilize os eventos OnEnter e OnExit para mudar o seu 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

Outras dicas

Eu estive lutando com a forma de evitar as 'lacunas' deixadas para trás em uma folha de dados, uma vez itens Combo são restritas e não poderia encontrar qualquer opção para a frente por um longo tempo .... até agora!

Deixando todas as opções disponíveis na caixa de combinação, mas acrescentando uma regra de validação temporária, usando OnCurrent, faz o truque perfeitamente.

Esperando esse alguém impede batendo sua cabeça na mesa durante o tempo que eu tenho.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top