No se puede establecer ComboBox.RowSource en forma continua
-
16-09-2019 - |
Pregunta
Estoy teniendo problemas para configurar el origen de fila de un determinado cuadro combinado en mi formulario (visto como una forma continua, aunque también parecen tener algunos problemas en el modo de forma individual).
El cuadro combinado está enlazado a un campo llamado supplierID
, y está destinado a presentar al usuario una lista de todos los posibles proveedores para un elemento. La fila de código que estoy utilizando para el cuadro combinado es:
SELECT DISTINCT Suppliers.name, Suppliers.supplierID
FROM Suppliers
INNER JOIN PartsSuppliers ON Suppliers.supplierID=PartsSuppliers.supplierID
WHERE PartsSuppliers.partID = partID;
Cuando veo esta consulta en el diseñador de consultas (con un Idpart modificable), que funciona bien - se selecciona todos los posibles proveedores para el elemento escogido, y no muestra cualquier otro artículo. Pero cuando miro a los elementos en el cuadro combinado, se muestra todos los proveedores presentes en la mesa PartsSuppliers
(que tiene sólo dos columnas, la cartografía de las partes a los posibles proveedores para ellos).
También he tratado de establecer el cuadro combinado de OrigenDeLaFila el uso de algunos de VBA en caso OnFocus (codificando el valor Idpart en), pero parece que nunca cambia el OrigenDeLaFila. El código VBA que estoy usando es:
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
También intentado abrir esa consulta en un conjunto de registros, y luego usar la configuración que RecordSet de registros como el del cuadro combinado, pero que no funcionó bien.
¿Qué estoy haciendo mal, o hay alguna otra manera que debería estar mirando para hacer la correcta inclinación hacia abajo?
N.B. He visto origen de fila personalizada de cuadro combinado de El acceso continuo en , pero esa solución aceptada no funcionaron para mí tampoco.
Solución
Utilice los eventos OnEnter
y OnExit
que cambiar su 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
Otros consejos
He estado luchando con la forma de evitar los 'blancos' dejado en una hoja de datos una vez que los artículos de Combo están restringidos y no pudieron encontrar ninguna opción recta hacia adelante desde hace mucho tiempo .... hasta ahora!
Dejando todas las opciones disponibles en el cuadro combinado, pero añadiendo una regla de validación temporal, utilizando AlActivarRegistro, hace el truco perfectamente.
Con la esperanza de esto impide que alguien golpeando su cabeza sobre el escritorio durante el tiempo que tengo.