2014-03-25 91 views
0

首先,讓我通過說我幾乎完全不瞭解Access,VBA或SQL知道序言。但是,當老闆要求你做某件事時,你就這樣做了。對於格式不佳,數據庫管理不當,以及我普遍缺乏知識,我事先表示歉意。級聯組合框

不管怎麼說,我有一個查詢,我需要使用組合框來組織一個大表。查詢的名稱是FinalTable,我希望組合框命名的字段是ID Maker.Billet Material,ID Maker.Billet Number,ID Maker.Test Type和ID Maker.Axis。一旦每個框被更新,我想顯示該行的其餘字段。

下面是我在窗體的代碼爲止。這是從我在Google上搜索時發現的教程中撕下來的,但我現在已經絕望地迷失和困惑,無法弄清下一步該怎麼做。

Private Sub TestType_AfterUpdate() 
    On Error Resume Next 
    Dim query As String 
    Dim Fields(3) 
    Fields(0) = "[ID Maker.Billet Material]" 
    Fields(1) = "[ID Maker.Billet Number]" 
    Fields(2) = "[ID Maker.Test Type]" 
    Fields(3) = "[ID Maker.Axis]" 

    query = "Select DISTINCT {replace} " & _ 
      "FROM FinalTable " & _ 
      "WHERE [ID Maker.Test Type] = '" & TestType.Value & "' " & _ 
      "WHERE [ID Maker.Billet Number] = " & BilletNumber.Value & " " & _ 
      "WHERE [ID Maker.Billet Material] = '" & BilletMaterial.Value & "' " & _ 
      "ORDER BY {replace};" 

    'Assign Queries 
    '========================= 
    Me.BilletMaterial.RowSource = Replace(query, "{replace}", Fields(0)) 'Billet Material Query 
    Me.BilletNumber.RowSource = Replace(query, "{replace}", Fields(1)) 'Billet Number Query 
    Me.TestType.RowSource = Replace(query, "{replace}", Fields(2)) 'Test Type Query 
    Me.Axis.RowSource = Replace(query, "{replace}", Fields(3)) 'Axis Query 

    'requery combobox's 
    Me.BilletMaterial.Requery 
    Me.BilletNumber.Requery 
    Me.TestType.Requery 
    Me.Axis.Requery 
End Sub 


Private Sub Axis_AfterUpdate() 
On Error Resume Next 
    Dim query As String 
    Dim Fields(3) 
    Fields(0) = "[ID Maker.Billet Material]" 
    Fields(1) = "[ID Maker.Billet Number]" 
    Fields(2) = "[ID Maker.Test Type]" 
    Fields(3) = "[ID Maker.Axis]" 

    query = "Select DISTINCT {replace} " & _ 
      "FROM FinalTable " & _ 
      "WHERE [ID Maker.Axis] = '" & Axis.Value & "' " & _ 
      "WHERE [ID Maker.Test Type] = '" & TestType.Value & "' " & _ 
      "WHERE [ID Maker.Billet Number] = " & BilletNumber.Value & " " & _ 
      "WHERE [ID Maker.Billet Material] = '" & BilletMaterial.Value & "' " & _ 
      "ORDER BY {replace};" 

    'Assign Queries 
    '========================= 
    Me.BilletMaterial.RowSource = Replace(query, "{replace}", Fields(0)) 'Billet Material Query 
    Me.BilletNumber.RowSource = Replace(query, "{replace}", Fields(1)) 'Billet Number Query 
    Me.TestType.RowSource = Replace(query, "{replace}", Fields(2)) 'Test Type Query 
    Me.Axis.RowSource = Replace(query, "{replace}", Fields(3)) 'Axis Query 

    'requery combobox's 
    Me.BilletMaterial.Requery 
    Me.BilletNumber.Requery 
    Me.TestType.Requery 
    Me.Axis.Requery 

query = ...聲明我現在在那裏現在導致錯誤。在我嘗試這之前,只有第一個WHERE語句。

回答

3

幾件改變。

  1. 您不必在查詢的每個元素中引用表格。 FinalTable只需包含在「發件人」聲明之後。
  2. 支架所必需的那些在有名稱空間的列名,這是編譯器如何區分是什麼,是不是一個查詢命令。
  3. 您需要重新查詢信息,以便它實際上可以填充到組合框中。

正如Query a table that has spaces in its name, MS Access C# VS2008

正確指出:「用方括號包圍隔開項目:

[通用站】

然後就打誰設計的數據庫的傢伙。」

所以給這個一杆,讓我知道如何去 - 注:不能測試它在我的系統上。

Private Sub Material_AfterUpdate() 
    On Error Resume Next 
    Me.BilletNumber.RowSource = "Select [ID Maker.Billet Number] " & _ 
     "FROM FinalTable " & _ 
     "WHERE [ID Maker.Billet Material] = '" & Material.Value & "' " & _ 
     "ORDER BY [ID Maker.Billet Number];" 
    Me.BilletNumber.Requery 
End Sub 

UPDATE

當然,你只有唯一的記錄,你可以利用在訪問DISTINCT命令。

其次,以用相同的信息組合框的另一個,你可以藏在一個字符串的查詢和重新查詢這兩個框。

Private Sub Material_AfterUpdate() 
     On Error Resume Next 
     Dim basequery As String 
     Dim Fields(3) 
     Fields(0) = "[ID Maker.Billet Material]" 
     Fields(1) = "[ID Maker.Billet Number]" 
     Fields(2) = "[ID Maker.Test Type]" 
     Fields(3) = "[ID Maker.Axis]" 

     basequery = "Select DISTINCT {replace} " & _ 
      "FROM FinalTable " & _ 
      "WHERE [ID Maker.Billet Material] = '" & Material.Value & "' " & _ 
      "ORDER BY {replace};" 

     'Assign Queries 
     '========================= 
     'I do NOT know your combobox names. 
     'Me.COMBOBOXNAME.RowSource - Change COMBOBOXNAME. 
     Me.BilletMaterial.RowSource = Replace(query, "{replace}", Fields(0)) 'Billet Material Query 
     Me.BilletNumber.RowSource = Replace(query, "{replace}", Fields(1)) 'Billet Number Query 
     Me.TestType.RowSource = Replace(query, "{replace}", Fields(2)) 'Test Type Query 
     Me.Axis.RowSource = Replace(query, "{replace}", Fields(3)) 'Axis Query 

     'requery combobox's 
     Me.BilletMaterial.Requery 
     Me.BilletNumber.Requery 
     Me.TestType.Requery 
     Me.Axis.Requery 
    End Sub 
+0

那麼沒有錯誤出現,所以這是進步。但是,第二個組合框未被填充。此外,有沒有辦法刪除組合框中的重複? – user3241316

+0

我喜歡這個問題/回答。我特別喜歡拍拍那些在名字中放置空格的人。 – Smandoli

+0

@ user3241316您可以使用'DISTINCT'命令修復重複問題。我不知道組合框的其他名稱,但您只需創建一個新字符串,複製並粘貼查詢,然後更改要返回的獨特值,將其分配給組合框和查詢,然後將其分配給您完成。請查看上面的代碼更新。 – Rich