2016-05-31 218 views
0

我正在使用Access 2003數據庫,並有2個組合框,我嘗試使用。我已經完善了第一個盒子,這是不同表格(部件類別)的下拉菜單。一旦選擇了該表,我希望能夠通過下拉框選擇來查看該類別內的部件號。從這裏我希望能夠使用該零件號碼爲該類別提取正確的報告,這樣我就可以爲每個零件號打印一份報告。我確信我必須編寫某種VBA,Query或Macro AfterUpdate()代碼,但我不知道如何用選定表格的零件編號填充第二個組合框。如何從組合框選擇中選擇表值?

Click here for an image of my Menu layout

這是我的第一個框查詢,以顯示我想要的表格:

SELECT Msysobjects.Name 
    FROM Msysobjects 
    WHERE (((Msysobjects.Name) not Like "MSYS*" 
    And (Msysobjects.Name) not like "_*" 
    And (Msysobjects.Name) not like "~*" 
    ) AND ((Msysobjects.Type)=1)) 
    ORDER BY Msysobjects.Name; 

而且我認爲這是我需要打印的第二個框有它的選擇之後:

Private Sub partnumberselect_AfterUpdate() 
    DoCmd.OpenTable Forms![_Datasheet Printing].Form.TagLabelSelection.Column(1), acViewNormal 
    End Sub 

如果您有任何問題,請提前致謝。

回答

0

請看下面的例子。

Private Sub cboCountry_AfterUpdate() 
    On Error Resume Next 
    cboCity.RowSource = "Select tblAll.City " & _ 
     "FROM tblAll " & _ 
     "WHERE tblAll.Country = '" & cboCountry.Value & "' " & _ 
     "ORDER BY tblAll.City;" 
End Sub 

enter image description here

您可以瞭解這個概念,和其他人,在下面的鏈接都看過。

http://www.fontstuff.com/access/acctut10.htm

+0

謝謝!該鏈接中的示例1是完美的,我只是輸入了所有的情況 – cdomination

2

您正在嘗試所謂的「級聯組合框」,這意味着第二個框依賴於第一個的選擇。

這是通過第二個組合框的控制源完成的。

您應該做的第一件事是編寫一個查詢,返回第二個組合框的所有可能選項,而不必過多關注如何根據第一個組合選擇進行過濾。一旦你擁有了它返回正確的數據,您將添加一個WHERE條款的第二個框的控制源這是這樣的:

WHERE Msysobjects.Name Like Forms![_Datasheet Printing]!TagLabelSelection.Value

這是引用您的第一個組合框的形式。因此,在第一個組合框中進行選擇之後,第二個組合框的基礎控制源將具有適當的標準以返回適當的選項。

然而,你將需要一些VBA添加到AfterUpdate()事件的第一組合框。一旦做出選擇,您需要第二個框來刷新控制源以填充正確的選擇。代碼很簡單:

Forms![_Datasheet Printing]![MySecondComboboxName].Requery

+0

這很有道理,所以謝謝!我對VB和Access完全陌生,因此編寫查詢以返回組合框的所有可能選項給我帶來麻煩。如果我這樣做: 從COM(其中一個表)中選擇CATALOG 我從COM表中得到我想要的結果。問題是從另外的〜20個表中拉出目錄列。 – cdomination

+0

@ChristinaDocenko聽起來像你的表可能是非規範化的。你有沒有組織桌子?無論哪種方式,請查看數據規範化,並在進一步開發之前評估您的結構是否正確。非規格化表使查詢不必要地複雜,並且在某些情況下不可能構建。 – MoondogsMaDawg

+0

@ChristinaDocenko從多個表中提取目錄號碼是非常複雜的。如果您需要正常化幫助,請隨時發起一個新問題。離別建議:看看20張桌子,他們或多或少都有相同的列?如果是這樣,表名稱唯一的區別是什麼?表名所代表的類別是否可以移動到組合表的新列中? IE瀏覽器。 「螺絲刀」「鑽頭」「鋸」作爲單獨的表格可以與「類別」字段組合,指定每行爲螺絲刀,鑽頭或鋸。 – MoondogsMaDawg