级联组合框

问题描述 投票:0回答:1

[首先,让我说一点我对Access,VBA或SQL几乎一无所知。但是,当老板要求您做某事时,您就去做。对于格式不正确,数据库管理不正确以及我普遍缺乏知识,我深表歉意。

无论如何,我在查询中有一个大表,需要使用组合框进行组织。该查询的名称为FinalTable,而我希望从中命名该组合框的字段为ID Maker.Billet物料,ID Maker.Billet编号,ID Maker.Test类型和ID Maker.Axis。更新每个框后,我要显示该行的其余字段。

到目前为止,这是我在表单代码中所拥有的。它是从我在谷歌搜索时发现的教程中摘录而来的,但是现在我无可救药地感到迷茫和困惑,无法弄清楚下一步该怎么做。

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语句。

vba ms-access ms-access-2007
1个回答
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
© www.soinside.com 2019 - 2024. All rights reserved.