誠然,我是一個新手,所以請耐心等待:)
我正在嘗試在 Access 365 上開發一個表單,用戶從表單上的一系列組合框中選擇值,組合框基于我在資料庫中創建的查找表。
我想要做的是,如果我將一個欄位值設定為地毯,請 在此處輸入影像描述
我想讓產品名稱欄位只彈出地毯的產品名稱,默認情況下,產品名稱欄位的查找串列將顯示所有地板型別的所有可能值。
我嘗試撰寫事件 VB 腳本以將 Flooring Type 值捕獲為全域變數,并且我能夠在訪問產品名稱組合框時顯示該變數可用的訊息框,但是我想調整行源查詢產品名稱查詢僅回傳與我選擇的地板型別匹配的值
SELECT DISTINCT Flooring.[Product Name], Flooring.[Flooring Type]
FROM Flooring
WHERE Flooring.[Flooring Type] = ProdType
ORDER BY Flooring.[Product Name];
WHERE Flooring.[Flooring Type] = WHERE (((Flooring.[Flooring Type])=[Forms]![Selections Flooring Type]![Product Type])) doesnt' seem to work either
問題是我在 VB 腳本中分配的 ProdType 全域變數沒有傳遞給 SQL 構建函式。所以我假設 VB 腳本和 SQL 設計器不相互交談。
還有另一種方法可以做到這一點嗎?
uj5u.com熱心網友回復:
假設使用 VBA,請考慮讓您的查詢指向保存在 Access 專案的標準模塊(即,不在表單或報表后面)中的用戶定義函式:
VBA
Public Global ProductType As String: ProductType = "some value"
Public Function GetProductType() As String
GetProductType = ProductType
End Function
SQL
SELECT DISTINCT Flooring.[Product Name], Flooring.[Flooring Type]
FROM Flooring
WHERE Flooring.[Flooring Type] = GetProductType();
但是,您可以簡單地運行條件組合框記錄源。
SELECT DISTINCT Flooring.[Product Name], Flooring.[Flooring Type]
FROM Flooring
WHERE (((Flooring.[Flooring Type])=[Forms]![Selections Flooring Type]![Product Type]));
但一定要在前面的組合框Requery的AfterUpdate事件上運行:
Private Sub Product_Type_Combo_AfterUpdate()
Me.Product_Name_Combo.Requery
End Sub
注意:因為您使用的是連續表單,所以.Requery偶數將在所有顯示的重復組合框上運行,如果該特定行不滿足組合框上的條件,這將導致一些顯示的資料消失。請放心,資料將保留在基礎表中。這可能會導致不希望的用戶體驗。
一種解決方法包括當用戶失去產品名稱組合框的焦點(事件)和用戶跨行導航(事件)時,將組合框重置為所有可能的產品型別(即無子句)。除了前面的組合框之外,這反過來可能會導致您進入事件的條件子集。基本上,您將在完整集和條件記錄源查詢之間切換。WHERELostFocusCurrentRow.RequeryGotFocusAfterUpdate
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/443340.html
上一篇:構建包含詳細資訊的交叉表查詢
