2016-01-21 156 views
0

背景:我的表單的記錄源是一個查詢(「BigQuery」),它只是組合了幾個相關的表。我正在設置組合框來編輯字段;這些組合框的控件源始終只是BigQuery的一個字段。其中一個字段是UnitType,另一個是UnitSubType。 UnitSubType有大約100個不同的條目,但是當與一個特定的UnitType配對時,它們中的許多沒有上下文意義:如果UnitType =「Car」,那麼UnitSubType =「18 wheeler」是沒有意義的,而且我很快就不會給客戶機會犯錯誤。部分A:當用戶在窗體上爲UnitType選擇一個值時,我想將UnitSubType的組合框限制爲已經與數據庫中的UnitType值配對的那些UnitSubType值。這是如何完成的?例如:如果表中已經存在一個或多個包含UnitType =「truck」和「UnitSubType =」18 wheeler「的記錄實例,則假設用戶已經在組合框中選擇了」truck「 UnitType在UnitSubType組合框中顯示的選項之一應該是「18惠勒」MS Access 2007:篩選組合框的選擇列表

問題,B部分:我還希望用戶能夠添加一個新的UnitSubType,只需在組合框中輸入它即可框:如果用戶已經在UnitType的組合框中選擇了「卡車」並在UnitSubType的組合框中手動鍵入「平板」,則編輯的記錄應該在UnitSubType中具有「平板」,並且未來的編輯操作應該包括「平板「作爲UnitSubType選擇,只要UnitType是」卡車「就可以了離子設置「允許值列表編輯」爲「是」照顧了這一點,但我想確保此功能可用於問題A部分提供的解決方案。

在SO中也有類似的問題線程,但在Access中,我是這樣一個noob,我一直無法推斷出答案以適合我的需要。對不起;請儘可能具體。

非常感謝! 戴夫

回答

0

我已經到達了我想分享的一個解決方案。訪問很難描述,但我會列舉例外情況並嘗試以這種方式傳達解決方案。

第一(主)組合框用於拾取單位類型:

  • 名稱:CBUnitType
  • 控件:UNITTYPE '''在主表中的字段:MainTbl
  • 行來源:

    SELECT DISTINCT MainTbl.UnitType 
    FROM MainTbl 
    ORDER BY MainTbl.UnitType; 
    
  • 綁定列:1

  • 允許值列表編輯:是
  • 鎖定:否
  • 更新後:[事件過程]'''請參閱下面顯示的子例程:ComboBoxUnitType_AfterUpdate()。

二(依賴)組合框用於拾取的單位子類型:

  • 名稱:CBUnitSubType
  • 控件:UnitSubType '''在主表中的字段:MainTbl
  • 行來源:ComboQueryUnitSubType'''由查詢生成器構建,詳細如下。
  • 綁定列:1個
  • 允許值列表編輯:是
  • 鎖定:否

查詢生成器對象:ComboQueryUnitSubType

SELECT DISTINCT [MainTbl].UnitSubType 
FROM [MainTbl] 
WHERE ((([MainTbl].UnitType)=[Forms]![Unit Editor]![UnitType])) 
ORDER BY [MainTbl].UnitSubType; 
通過選擇創建「

VBA子程序[事件過程]對於上述組合框「CBUnitType」中的After Update事件,VBA子例程自動置於模塊n中的VBA環境中的Microsoft Office Access Class Objects文件夾中amed:「Form_Unit編輯器」。子例程的名稱也被預選爲:「ComboBoxUnitType_AfterUpdate()」幾乎可以肯定,如果你改變了這些名字中的任何一個,那麼這些鏈接將會被破壞得很厲害。該模塊中的VBA代碼:

Option Compare Database 
Option Explicit 

Private Sub ComboBoxUnitType_AfterUpdate() 
    Forms![Unit Editor]![ComboBoxUnitSubType].Requery 
    Forms![Unit Editor]![ComboBoxUnitSubType].Value = "" 
End Sub 

所以,大意是這樣的:用戶更新組合框後的單位類型,在VBA程序執行,並重新查詢爲單位亞型組合框查詢,然後它任意取得Unit SubType組合框的.value參數並將其清除爲空字符串。

我想感謝Blue Claw Database Design提供的慷慨教程。具體而言,重新查詢組合框查詢的VBA代碼是一種生命保護程序,並在其教程中詳細介紹Dependent Drop Down List Box爲什麼查詢ComboQueryUnitSubType(作爲組合框的行源指定)不會每次都由Access自動重新運行用戶選擇的組合框是任何人的猜測。

對於囉嗦的問題和答案,我很抱歉。我希望在不久的將來回到一些不錯的簡潔代碼! Dave