1

フォームで特定のコンボ ボックスの行ソースを設定する際に問題があります (連続フォームとして表示されますが、単一フォーム モードでも問題があるようです)。

コンボボックスは と呼ばれるフィールドにバインドされてsupplierIDおり、アイテムのすべての可能なサプライヤーのリストをユーザーに提示することを目的としています。コンボボックスに使用している行ソースは次のとおりです。

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

クエリ デザイナーでこのクエリを表示すると (partID がハードコードされています)、問題なく動作します。選択したアイテムの可能なすべてのサプライヤーが選択され、他のアイテムは表示されません。しかし、コンボボックスの項目を見ると、テーブルに存在するすべてのサプライヤーが表示されPartsSuppliersます (2 つの列しかなく、部品を可能なサプライヤーにマッピングします)。

また、OnFocus イベントで VBA を使用してコンボ ボックスの RowSource を設定しようとしましたが (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

また、そのクエリを RecordSet で開き、その RecordSet をコンボ ボックスの RecordSet として設定しようとしましたが、どちらも機能しませんでした。

私は何を間違っていますか、または正しいドロップダウンを作成するために見るべき他の方法はありますか?

NB Access でコンボボックスのカスタム行ソースを連続形式で見たことがありますが、その受け入れられた解決策も私にとってはうまくいきませんでした。

4

2 に答える 2

3

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
于 2009-11-05T04:34:00.967 に答える