連続フォームにComboBox.RowSourceを設定することができません。
-
16-09-2019 - |
質問
私は(私もシングルフォームモードでいくつかの問題を持っているように見えるものの、連続フォームとして見て)私のフォーム上の特定のコンボボックスの行ソースを設定する問題を抱えています。
コンボボックスはsupplierID
というフィールドにバインドされ、項目のすべての可能なサプライヤーのリストをユーザに提示するためのものです。私はコンボボックスのために使用していますが、行のソースは、次のとおりです。
SELECT DISTINCT Suppliers.name, Suppliers.supplierID
FROM Suppliers
INNER JOIN PartsSuppliers ON Suppliers.supplierID=PartsSuppliers.supplierID
WHERE PartsSuppliers.partID = partID;
私は(ハードコードされpartID付き)クエリデザイナーでこのクエリを表示すると、、それが正常に動作 - それは、選択された項目のすべての可能な取引先を選択し、他の項目を表示しません。私は、コンボボックス内の項目を見ると、それは(彼らのために可能なサプライヤーに部品をマッピングし、ちょうど2つの列があります)PartsSuppliers
テーブルに存在するのすべてののサプライヤーを示しています。
私も(中partID値をハードコーディング)ONFOCUSイベントでいくつかのVBAを使ってコンボボックスの値集合ソースを設定しようとしたが、値集合ソースを変更するようではありません。私が使用しています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
私はまた、レコードセット内のそのクエリを開いて、その後、コンボボックスのレコードセットとしてそのレコードセットを設定し使用してみましたが、それはどちらか動作しませんでした。
私は間違って何をやっている、または私がダウンして、正しいドロップを作るために見てしなければならない他のいくつかの方法がありますか?
N.B。私は、コンボボックスのカスタム行ソース内を見てきましたアクセスするで連続用紙が、それ受け入れソリューションは、いずれかの私のために動作しませんでした。
解決
あなたの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使用して、一時的な検証ルールを追加し、完全にトリックを行います。
これは限り私が持っているために机の上に自分の頭を叩いて誰かを防ぐ願ってます。